0
我必须为给定名称空间rofl
中的所有类型专门化模板函数。模板类型的命名空间约束是否可能?我记住以下几点:模板定义中的名称空间约束
template<typename rofl::T>
MyClass::MyFunc() {
impl = T::create();
}
我必须为给定名称空间rofl
中的所有类型专门化模板函数。模板类型的命名空间约束是否可能?我记住以下几点:模板定义中的名称空间约束
template<typename rofl::T>
MyClass::MyFunc() {
impl = T::create();
}
如果您将函数模板放入您想要专用的命名空间中,则可以使用依赖于参数的查找。
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.
“for all instances” - 对于所有实例的所有实例?模板专门用于类型,而不是实例。 –
是的。经过一天的编程,这种错误可能会发生。 – PaulProgrammerNoob
你为什么想这么做? –