我有一个模板类:templClass
,它接受一个类型并像常规模板类一样工作。我希望该类成为另一个常规类 regClass
的成员。
regClass
有一个成员变量 var
,我希望基于它创建 type1
或 type2 的
:
所以是这样的templClass
template <class T>
class templClass
{
//constructor
};
class regClass
{
public:
regClass()
{
// constructor for other members
}
int var;
templClass templClass_;
// if (var == 0)
// {I want templClass<type1>}
// else
// {I want templClass<type2>}
};
我怎样才能做到这一点?
上面的实现抛出编译器错误 error: invalid use of template-name 'templClass' without an argument list
最佳答案
那是不可能的。
您必须使用类模板的显式实例化。例如
templClass<int> templClass_;
或
templClass<double> templClass_;
另一种选择是使 regClass
也是一个类模板,其中 var
是模板参数而不是成员变量。
template <int> struct MemberTypeSelector;
template <> struct MemberTypeSelector<0>
{
using type = templClass<int>;
};
template <> struct MemberTypeSelector<1>
{
using type = templClass<double>;
};
// Add more specializations of MemberTypeSelector as needed.
template <int var>
class regClass
{
public:
using MemberType = typename MemberTypeSelector<var>::type;
regClass()
{
// constructor for other members
}
MemberType member;
};
关于c++ - 如何将模板类添加为普通类中的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57979436/