Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板定义中的命名空间约束_C++_Templates_Namespaces_Template Specialization - Fatal编程技术网

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的问题。您需要实现什么?模板的一部分荣耀在于,它们将根据您的需要进行专门化。您是否希望创建一个包含预专门化模板池的文件,以减小可执行文件或库的大小?