我已经为两种类型A和B编写了一个适配器模式,以便适应这些类型。这只是一个普通的模板类。问题是我需要从A和B转换。虽然我不知道A和B的类型,但稍后会通过专业化来提供它们。
有没有办法通过告诉C ++将来会存在类型转换器来允许从任意A和B进行转换,如果没有则会抛出错误。 (而不是假设没有办法转换)
例如:
template<typename A, typename B> B Converter(A a) { return B(); }
此转换器适用于任意类型,但显然无法正确转换。我想指出:
template<> int Converter(int a) { return a/2; }
template<> float Converter(bool a) { return (a) ? 0.45f : 12f; }
template<> int Converter(myType a) { return a.value; }
then, later one, by the "user"(after compilation) I would like to effectively create more converters. For example, I will allow the user to hook into my code and supply converters for their custom types.
我想我可以修改
template<typename A, typename B> B Converter(A a) { `Find appropriate converter in list and use that` }
更复杂,但我正在寻找一种有效的方法来做到这一点。实际上,我想允许使用多个相同类型的转换器:
template<> int Converter(int a) { return a/4; }
(因此,在一种情况下,我将使用int to int转换器将值减半,在另一种情况下,我将使用/ 4。我希望能够动态地更改这些。所以我赢了'真的使用专业化)
我只是想在编译时插入我的类型转换器(我会写一些)或运行时(用户会写一些)。我希望它们非常快,我希望我写的转换器更快,因为它们是内置的。
有什么想法吗?