根据其他模板类型确定模板类型

时间:2018-12-09 20:37:26

标签: c++ templates

我可以为模板类型指定T的类型,取决于另一个模板类型为U的类型 在函数内部类似这样的东西。

typename <class T, class U>
func(U var)
{
...

if(U == int) //this can be replaced with std::is_same<U, int>
{
    T = flaot; //instead int/float i have my own data types

}
...
}

这是可能的..如果是这样

1 个答案:

答案 0 :(得分:4)

不确定是否是您想要的,但是您可以尝试以下方法:

template <typename T>
class Selector; // implement this one as well, if you want to have a default...

template <> class Selector<int> { public: using Type = ClassX; };
template <> class Selector<double> { public: using Type = ClassY; };

template<typename U>
void func(U var)
{
    using T = typename Selector<U>::Type;
};

变量:

template<typename U, typename T = typename Selector<U>::Type>
void func(U var) { }

这将允许替换选定的类型,如果需要的话:

func(12);              // uses default: ClassX
func<int, ClassZ>(10); // replace ClassX with ClassZ