C++ 模板定义中的命名空间约束
我必须为给定名称空间中的所有类型专门化模板函数C++ 模板定义中的命名空间约束,c++,templates,namespaces,template-specialization,C++,Templates,Namespaces,Template Specialization,我必须为给定名称空间中的所有类型专门化模板函数rofl。模板类型是否可以使用名称空间约束?我有以下想法: template<typename rofl::T> MyClass::MyFunc() { impl = T::create(); } 模板 MyClass::MyFunc(){ impl=T::create(); } 如果将函数模板放入要专门化的命名空间中,则可以使用参数相关查找 struct Out{}; namespace ns { struct In
rofl
。模板类型是否可以使用名称空间约束?我有以下想法:
template<typename rofl::T>
MyClass::MyFunc() {
impl = T::create();
}
模板
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);
}
如果将函数模板放入要专门化的命名空间中,则可以使用参数相关查找
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);
}
“适用于所有实例”-适用于什么的所有实例?模板专注于类型,而不是实例。没错。经过一天的编程,可能会发生这样的错误。您认为为什么要这样做?因为名称空间对类型没有影响,这将使这不可能。听起来像是XY的问题。您需要实现什么?模板的一部分荣耀在于,它们将根据您的需要进行专门化。您是否希望创建一个包含预专门化模板池的文件,以减少可执行文件或库的大小?“针对所有实例”-针对什么的所有实例?模板专注于类型,而不是实例。没错。经过一天的编程,可能会发生这样的错误。您认为为什么要这样做?因为名称空间对类型没有影响,这将使这不可能。听起来像是XY的问题。您需要实现什么?模板的一部分荣耀在于,它们将根据您的需要进行专门化。您是否希望创建一个包含预专门化模板池的文件,以减小可执行文件或库的大小?