我已经为两种类型 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 到 int 的转换器,将值减半,在另一种情况下,我将使用 a/4。我希望能够动态更改这些。所以我不会使用真的专业)
我只是想在编译时(我会写一些)或运行时(用户会写一些)插入我的类型转换器。我希望这些速度非常快,并且我希望我编写的转换器更快,因为它们是内置的。
有任何想法吗?