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

How can I influence the return type of a template class method based on some template argument?

本文关键字:影响 类方法 返回类型 参数 何根      更新时间:2023-10-16

模板类应该有一个方法,该方法的返回类型基于模板参数。在此示例中,如何使函数返回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();
}

你可以这样做:

typename std::conditional<K, T&, T>::type giveback() { return member; }

如果K为 0,则类型将为 T ,否则为 T&

但是,实际上

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