c++ - 如何将模板类添加为普通类中的成员

标签 c++ class c++11 templates c++14

我有一个模板类:templClass,它接受一个类型并像常规模板类一样工作。我希望该类成为另一个常规类 regClass 的成员。 regClass 有一个成员变量 var,我希望基于它创建 type1type2 的 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/

相关文章:

c++ - 访问前 n 个可变函数参数

c++ - C2977 : 'std::tuple' : too many template arguments (MSVC11)

c++ - 为模板结构中定义的成员结构重载运算符<<

c++ - C++调用抽象基类的构造函数

c++ - 做加法时第一类对象被修改

c++ - 可以删除继承的成员或阻止继承某些属性/方法吗?

python - Cython:导致段错误的堆栈分配对象的赋值运算符

c++ - 为什么 getpeername 中的 namelen-parameter 在 Winsock 中使用指针?

c++ - 双倍作为实数的默认数据类型

C++ 类 - 如何将自定义类型的 vector 传递给函数