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
C++ 专门化非模板类的成员函数模板_C++_Templates_Template Specialization_Overloading_Function Templates - Fatal编程技术网

C++ 专门化非模板类的成员函数模板

C++ 专门化非模板类的成员函数模板,c++,templates,template-specialization,overloading,function-templates,C++,Templates,Template Specialization,Overloading,Function Templates,以下成员函数模板bar的专门化是否有效?它在GCC4.5.3和VS.NET2008上编译。我很困惑,因为我隐约记得读到函数模板不能被专门化 struct Foo { template<typename T> void bar(); }; template<typename T> void Foo::bar(){} template<> void Foo::bar<bool>(){} int main() { Foo f

以下成员函数模板
bar
的专门化是否有效?它在GCC4.5.3和VS.NET2008上编译。我很困惑,因为我隐约记得读到函数模板不能被专门化

struct Foo
{
    template<typename T>
    void bar();
};

template<typename T>
void Foo::bar(){}

template<>
void Foo::bar<bool>(){}

int main()
{
    Foo f;
    f.bar<char>();
    f.bar<bool>();
}
structfoo
{
模板
空心钢筋();
};
模板
void Foo::bar(){}
模板
void Foo::bar(){}
int main()
{
福福;
f、 bar();
f、 bar();
}

函数模板不能部分专用,但可以显式专用,您的代码是完全正确的。

函数模板不能部分专用,但可以显式专用,您的代码是完全正确的。

函数模板不能部分专用,但可以显式专用,您的代码是完全正确的。

函数模板不能部分专用,但可以显式专用,您的代码是完全正确的。

函数模板部分专用,因为函数模板重载可用于解决相同的问题。然而,在进行此操作时,必须寻找一些方法

例如:

template <typename T> void foo(T);
void foo(int);

foo(10);   // calls void bar(int)
foo(10.f); // calls void bar(T) [with T = float]
foo(10u);  // calls void bar(T) [with T = unsigned int]!!
模板void foo(T);
void foo(int);
傅(10);//调用无效条(int)
foo(10.f);//调用无效条(T)[T=float]
foo(10u);//调用无效条(T)[带T=unsigned int]!!
对于你的情况,这样的东西可能会有用

struct Foo
{
    template<typename T>
    void bar(T dummy);

    void bar(bool dummy);
};

template<typename T>
void Foo::bar(T dummy) { }

void Foo::bar(bool dummy) { }

int main()
{
    Foo f;
    f.bar('a');
    f.bar(true);
}
structfoo
{
模板
空心钢筋(T型假人);
空心杆(bool假人);
};
模板
void Foo::bar(T dummy){}
void Foo::bar(bool dummy){}
int main()
{
福福;
f、 酒吧(‘a’);
f、 巴(真);
}

函数模板部分专门化,因为函数模板重载可用于解决相同的问题。然而,在进行此操作时,必须寻找一些方法

例如:

template <typename T> void foo(T);
void foo(int);

foo(10);   // calls void bar(int)
foo(10.f); // calls void bar(T) [with T = float]
foo(10u);  // calls void bar(T) [with T = unsigned int]!!
模板void foo(T);
void foo(int);
傅(10);//调用无效条(int)
foo(10.f);//调用无效条(T)[T=float]
foo(10u);//调用无效条(T)[带T=unsigned int]!!
对于你的情况,这样的东西可能会有用

struct Foo
{
    template<typename T>
    void bar(T dummy);

    void bar(bool dummy);
};

template<typename T>
void Foo::bar(T dummy) { }

void Foo::bar(bool dummy) { }

int main()
{
    Foo f;
    f.bar('a');
    f.bar(true);
}
structfoo
{
模板
空心钢筋(T型假人);
空心杆(bool假人);
};
模板
void Foo::bar(T dummy){}
void Foo::bar(bool dummy){}
int main()
{
福福;
f、 酒吧(‘a’);
f、 巴(真);
}

函数模板部分专门化,因为函数模板重载可用于解决相同的问题。然而,在进行此操作时,必须寻找一些方法

例如:

template <typename T> void foo(T);
void foo(int);

foo(10);   // calls void bar(int)
foo(10.f); // calls void bar(T) [with T = float]
foo(10u);  // calls void bar(T) [with T = unsigned int]!!
模板void foo(T);
void foo(int);
傅(10);//调用无效条(int)
foo(10.f);//调用无效条(T)[T=float]
foo(10u);//调用无效条(T)[带T=unsigned int]!!
对于你的情况,这样的东西可能会有用

struct Foo
{
    template<typename T>
    void bar(T dummy);

    void bar(bool dummy);
};

template<typename T>
void Foo::bar(T dummy) { }

void Foo::bar(bool dummy) { }

int main()
{
    Foo f;
    f.bar('a');
    f.bar(true);
}
structfoo
{
模板
空心钢筋(T型假人);
空心杆(bool假人);
};
模板
void Foo::bar(T dummy){}
void Foo::bar(bool dummy){}
int main()
{
福福;
f、 酒吧(‘a’);
f、 巴(真);
}

函数模板部分专门化,因为函数模板重载可用于解决相同的问题。然而,在进行此操作时,必须寻找一些方法

例如:

template <typename T> void foo(T);
void foo(int);

foo(10);   // calls void bar(int)
foo(10.f); // calls void bar(T) [with T = float]
foo(10u);  // calls void bar(T) [with T = unsigned int]!!
模板void foo(T);
void foo(int);
傅(10);//调用无效条(int)
foo(10.f);//调用无效条(T)[T=float]
foo(10u);//调用无效条(T)[带T=unsigned int]!!
对于你的情况,这样的东西可能会有用

struct Foo
{
    template<typename T>
    void bar(T dummy);

    void bar(bool dummy);
};

template<typename T>
void Foo::bar(T dummy) { }

void Foo::bar(bool dummy) { }

int main()
{
    Foo f;
    f.bar('a');
    f.bar(true);
}
structfoo
{
模板
空心钢筋(T型假人);
空心杆(bool假人);
};
模板
void Foo::bar(T dummy){}
void Foo::bar(bool dummy){}
int main()
{
福福;
f、 酒吧(‘a’);
f、 巴(真);
}