riz*_*ize 1 c++ templates specialization
我必须为模板类实现非成员函数isHomogenous(Triple triple),定义为:
template <typename T1, typename T2, typename T3>
    class Triple
{
public:
    Triple()
    { }
    Triple(const T1 &a, const T2 &b, const T3 &c) : a(a), b(b), c(c)
    { }
...
isHomogenous函数应返回一个bool值,指示参数triple中的所有三个值是否属于同一类型.我试过了:
template <typename T> bool isHomogenous(Triple<T, T, T> triple) {
    return true;
}
template <typename T1, typename T2, typename T3> bool isHomogenous(Triple<T1, T2, T3> triple) {
    return false;
}
这不起作用,你可以提示我解决方案吗?
功能模板不能部分专用.
一种替代方法是将其定义为类模板的静态成员函数(或者在您的情况下只是一个值!),然后只提供一个普通的函数模板包装器,如...
#include <type_traits>
template< class T1, class T2, class T3 >
struct Blah {};
namespace detail {
    template< class T1, class T2, class T3 >
    struct IsHomogenous { static bool const yes = false; };
    template< class T >
    struct IsHomogenous< T, T, T > { static bool const yes = true; };
}  // namespace detail
template< class T1, class T2, class T3 >
bool isHomogenous( Blah< T1, T2, T3 > )
{
    return detail::IsHomogenous< T1, T2, T3 >::yes;
}
#include <iostream>
int main()
{
    using namespace std;
    wcout << boolalpha
        << isHomogenous( Blah< double, char, void >() ) << " "
        << isHomogenous( Blah< int, int, int >() )
        << endl;
}
另一种方法是使用C++ 11 std::is_same:
#include <type_traits>
template< class T1, class T2, class T3 >
struct Blah {};
template< class T1, class T2, class T3 >
bool isHomogenous( Blah< T1, T2, T3 > )
{
    using std::is_same;
    return is_same< T1, T2 >::value && is_same< T2, T3 >::value;
}
#include <iostream>
int main()
{
    using namespace std;
    wcout << boolalpha
        << isHomogenous( Blah< double, char, void >() ) << " "
        << isHomogenous( Blah< int, int, int >() )
        << endl;
}