C ++任意(动态)类型转换

时间:2012-11-26 09:11:47

标签: c++ templates

我已经为两种类型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。我希望能够动态地更改这些。所以我赢了'真的使用专业化)

我只是想在编译时插入我的类型转换器(我会写一些)或运行时(用户会写一些)。我希望它们非常快,我希望我写的转换器更快,因为它们是内置的。

有什么想法吗?

0 个答案:

没有答案