如何根据某些模板参数影响模板类方法的返回类型?

dan*_*ani 2 c++ templates metaprogramming c++14

模板类应该有一个返回类型基于模板参数的方法.在这个例子中,我如何让函数返回int(副本)K=0int&(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)

Bri*_*ian 6

你可以这样做:

typename std::conditional<K, T&, T>::type giveback() { return member; }
Run Code Online (Sandbox Code Playgroud)

如果K是0那么类型将是T,否则它将是T&.

但是,没有"没有模板专业化"这样的东西,因为std::conditional是使用模板专业化实现的.使用std::conditional只是帮助您本地化模板专业化,而不必复制整个类的大部分内容.