我有一个类模板X
,如下所示:
template <typename T>
class X {
public:
X(T &t): t_ {t} {}
private:
T &t_;
};
有没有办法对T = int
进行专门化,以便整数X<int>(i)
的表达式i
除了“{1}}编译时间”返回“之外什么都不做?
换句话说,我想对i
和double
(int
和X<double>(d)
分别使用相同的语法)但前者调用初始化a的构造函数上面代码中显示的引用,而后者忽略了“语法糖”和“返回”整数X<int>(i)
而没有做任何事情。
答案 0 :(得分:2)
您可以分别为int
和double
提供模板专精,并使用转换运算符。像这样:
// 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