C++ 带有模板函数的Typedef

C++ 带有模板函数的Typedef,c++,c++11,C++,C++11,假设我在名称空间a中有一个模板函数。我还有另一个名称空间B。名称空间a中声明了一个模板函数,定义为 template<typename T, typename U> void f(T a, U b); 没有实际实现调用模板函数的函数。既然有一种方法可以用特定的模板参数来声明新的类型名,那么不应该也有一种方法可以用函数来声明新的类型名吗? 我尝试了不同的方法来实现它,但没有完全奏效 Pc> C++中有没有一种方法在没有实际实现新函数的情况下用给定模板参数重新声明函数?如果不是,在C

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

template<typename T, typename U>
void f(T a, U b);
没有实际实现调用模板函数的函数。既然有一种方法可以用特定的模板参数来声明新的类型名,那么不应该也有一种方法可以用函数来声明新的类型名吗? 我尝试了不同的方法来实现它,但没有完全奏效

<> Pc> C++中有没有一种方法在没有实际实现新函数的情况下用给定模板参数重新声明函数?如果不是,在C++11中是否可以实现

这将是一个整洁的功能,因为它将使函数的目的更加明确,并且在语法上更好:)

编辑:这样就可以写:

using A::f<int, double>;
使用A::f;

在B名称空间中,函数将与那些模板参数一起显示

您可以使用
使用

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

namespace B {
    using ::A::f;
}
名称空间A{
模板空隙f(T);
模板void f(int);//专门化
}
命名空间B{
使用::A::f;
}

您无法区分这样的专门化(因为
使用
只涉及名称),但它应该足以使所需的专门化可见。

您可以包装一个内联函数:

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); }
};
名称空间A
{
模板
无效f(T a,U b);
};
命名空间B
{
内联void f(inta,double b){a::f(a,b);}
};
见这个问题:


看一眼,这有帮助吗?不太确定它是否是这样的,因为现在的VisualC++的版本不支持使用语法(?)。至少对我来说,它只是输出了大量语法错误。编译器还必须支持该功能。我认为GCC还没有。
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); }
};