具有模板函数的Typedef

时间:2012-04-09 18:52:07

标签: c++ c++11

假设我在命名空间A中有一个模板函数。我还有另一个命名空间B.在命名空间A中声明了一个模板函数,定义为

template<typename T, typename U>
void f(T a, U b);

现在在命名空间B中,我想要声明一个特殊类型的模板函数。我在想是否可以typedef模板函数,因此它在命名空间B中声明为

void f(int a, double b);

没有实际调用模板函数的函数。由于有一种方法可以声明具有特定模板参数的新类型名称,所以不应该有办法用函数来做吗? 我尝试了不同的方法来实现它,但它并没有完全解决。

那么在C ++中是否已经有一种方法可以使用给定的模板参数重新声明该函数而无需实际实现新函数?如果没有,它在C ++ 11中是否可以实现?

这将是一个很好的功能,因为它会使函数的目的更清晰,并在语法上更好:)

编辑:所以可以写:

using A::f<int, double>;
在B名称空间中

,该函数将显示这些模板参数

2 个答案:

答案 0 :(得分:5)

您可以使用using

namespace A {
    template <typename T> void f(T);
    template <> void f<int>(int);    // specialization
}

namespace B {
    using ::A::f;
}

您无法区分 specializations (因为using只是关于名称),但它应该足以实现所需的专业化可见。

答案 1 :(得分:2)

您可以包装内联函数:

namespace A
{
    template<typename T, typename U>
    void f(T a, U b);
};

namespace B
{
    inline void f(int a, double b) { A::f(a,b); }
};

看到这个问题:

C++11: How to alias a function?