关于c ++模板函数的问题,只要该类型符合至少一个要求,就可以使用任何类型

sme*_*lin 4 c++ templates

由于我无法解释这一点,我将立即从一个小例子开始:

template <class T> void Print(const T& t){t.print1();}
template <class T> void Print(const T& t){t.print2();}
Run Code Online (Sandbox Code Playgroud)

这不编译:
error C2995: 'void Print(const T &)' : function template has already been defined

那么,我怎样才能创建一个模板函数,T只要该类型具有print1成员函数或print2成员函数(没有多态性),它就采用任何类型?

Unc*_*ens 5

一种方法是使用SFINAE来检测函数是否存在(是否可以编写模板来检查函数的存在?,SFINAE来检查继承的成员函数),并将知识与Boost.Enable_if结合起来.