仅专注于模板功能实现的一部分

时间:2012-07-02 20:55:35

标签: c++ templates boost runtime compile-time

我想知道,如果其中一个模板参数属于某种类型,是否有可能部分地特化模板化方法行为。

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 */
}

欢迎任何建议。 感谢

3 个答案:

答案 0 :(得分: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 */
}

答案 1 :(得分: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 */
}

答案 2 :(得分:0)

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

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