dan*_*ani 2 c++ templates metaprogramming c++14
模板类应该有一个返回类型基于模板参数的方法.在这个例子中,我如何让函数返回int
(副本)K=0
和int&
(ref)K=1
?
template<typename T, int K>
class someclass
{
public:
someclass() : member(3) { }
T giveback() { return member; } // if K=0 should return by T, else return by T&
private:
T member;
};
int main()
{
someclass<int,0> x;
x.giveback();
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
typename std::conditional<K, T&, T>::type giveback() { return member; }
Run Code Online (Sandbox Code Playgroud)
如果K
是0那么类型将是T
,否则它将是T&
.
但是,没有"没有模板专业化"这样的东西,因为std::conditional
是使用模板专业化实现的.使用std::conditional
只是帮助您本地化模板专业化,而不必复制整个类的大部分内容.