有没有办法在C++中“翻译”类型?
根据变量的类型,我想调用模板化函数(给出)。问题是,模板的预期类型不会直接适合。
示例:如果我的变量的类型是int,那么我想调用该函数foo<classA>()。如果类型是double我想打电话
foo<classB>()等等......
到目前为止,我已经在 switch case 中调用了该函数。
我的问题是:有没有办法“翻译”类型?…… 就像我传递的函数一样int,我会classA回来?这样我就可以简单地调用这个函数:foo<translate_type(variable)> foo()
正如我所写的,我尝试过的是一个开关盒。另一种可能性可能是围绕模板的模板化函数。一个接受 egint然后调用正确的函数foo<classA>()。此外,我想避免使用宏。
也许现代 C++ 有更好的方法?一种在不使用案例的情况下可维护性更好的方法。
回答
template<class T>
struct type_trait{using type=T;}; // can leave the type part out, and even the body, for errors/diagnostics
template<class T>
using type_trait_t=typename type_trait<T>::type;
template<>
struct type_trait<int>{using type=Foo;};
template<>
struct type_trait<double>{using type=Bar;};
template<class T> void func(){}
func<type_trait_t<int>>(); // calls func<Foo>
func<type_trait_t<double>>(); // calls func<Bar>
func<type_trait_t<char>>(); // calls func<char>
我想这就是你要找的?