1

我想知道是否有可能部分专门化模板化方法的行为,以防模板参数之一属于某种类型。

template<class T>
void Foo(T& parameter)
{
    /* some generic - all types - stuff */

    If(T is int) // this is pseudo-code, typeinfo? Boost?
    {
        /* some specific int processing which might not compile with other types */
    }

    /* again some common stuff */
}

欢迎任何建议。谢谢

4

3 回答 3

3

如果您只想专门化函数的一部分,那么您只需使用专门的实现来分解出函数的一部分:

template<class T>
void Bar(T &t) {}

void Bar(int &i) {
    /* some specific int processing which might not compile with other types */
}


template<class T>
void Foo(T &t) {
    /* some generic - all types - stuff */

    Bar(t);

    /* again some common stuff */
}
于 2012-07-02T21:01:37.850 回答
2

当然:

// helper funciton
template <class T>
void my_helper_function(T& v)
{
  // nothing specific
}

void my_helper_function(int& v)
{
  // int-specific operations
}

// generic version
template <class T>
void Foo(T& v)
{
  /* some generic - all types - stuff */

  my_helper_function(v);

  /* again some common stuff */
}
于 2012-07-02T21:00:07.500 回答
0

是的,您可以提供模板函数的化(只是不提供部分特化)。对于成员函数,您需要在包含模板的类之后的命名空间级别定义特化。

如果您的意思是只应该专门化部分函数,​​您不能直接这样做,但是您可以创建另一个实现该部分逻辑的模板化函数,专门化它并从您的模板中调用它。编译器将使用Foo模板的单一版本和FooImplDetail函数的适当版本。

于 2012-07-02T20:56:57.300 回答