我必须为给定命名空间rofl
中的所有类型专门化模板函数。是否可以使用模板类型的命名空间约束?我有以下几点:
template<typename rofl::T>
MyClass::MyFunc() {
impl = T::create();
}
答案 0 :(得分:2)
如果将函数模板放在要专门设置的命名空间中,则可以使用参数依赖查找。
struct Out{};
namespace ns
{
struct In{};
template <typename T>
void ADL(const T&){} //Found via argument dependent lookup
}
template <class T, class U = decltype(ADL(std::declval<T>()))>
void func_impl(int) //Better match, only works if function ADL is found
{
std::cout << "Specialized.\n";
}
template <class T>
void func_impl(...)
{
std::cout << "Unspecialized.\n";
}
template <class T>
void func()
{
func_impl<T>(0);
}
当您致电func
时,它会调用func_impl
的正确重载。
func<Out>(); //prints Unspecialized.
func<ns::In>(); //prints Specialized.