如何使用整数类型本身专门化类模板?

时间:2018-05-08 09:45:29

标签: c++11 templates template-specialization

我有一个类模板X,如下所示:

template <typename T>
class X {
 public:
   X(T &t): t_ {t} {}

 private:
   T &t_;
};

有没有办法对T = int进行专门化,以便整数X<int>(i)的表达式i除了“{1}}编译时间”返回“之外什么都不做?

换句话说,我想对idoubleintX<double>(d)分别使用相同的语法)但前者调用初始化a的构造函数上面代码中显示的引用,而后者忽略了“语法糖”和“返回”整数X<int>(i)而没有做任何事情。

1 个答案:

答案 0 :(得分:2)

您可以分别为intdouble提供模板专精,并使用转换运算符。像这样:

// the same applies for double
template<>
class X<int> {
 public:
   constexpr X(int t) : t_ {t} {}

   constexpr operator int() const { return t; }

 private:
   int t_;
};

这将允许以下类似的工作(如果我误解了你的问题,请纠正我):

constexpr int n = X<int>(20); // n == 20