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++ 是否可以使用模板定义中定义的函数体显式实例化函数? 让我们考虑下面的代码: #include<iostream> class A { public: template<class T> void foo(T t){_C++_Templates - Fatal编程技术网

C++ 是否可以使用模板定义中定义的函数体显式实例化函数? 让我们考虑下面的代码: #include<iostream> class A { public: template<class T> void foo(T t){

C++ 是否可以使用模板定义中定义的函数体显式实例化函数? 让我们考虑下面的代码: #include<iostream> class A { public: template<class T> void foo(T t){,c++,templates,C++,Templates,是否可以使用模板定义中定义的函数体显式实例化函数? 让我们考虑下面的代码: #include<iostream> class A { public: template<class T> void foo(T t){ std::cout << "foo()" << std::endl; } }; template<> void A::foo<int>(int t); template<> voi

是否可以使用模板定义中定义的函数体显式实例化函数?

让我们考虑下面的代码:

#include<iostream>

class A
{
public:
    template<class T>
    void foo(T t){ std::cout << "foo()" << std::endl; }
};

template<> void A::foo<int>(int t);
template<> void A::foo<A*>(A* t);

int main(){ A a; a.foo(5); };
#包括
甲级
{
公众:
模板

void foo(T){std::cout不清楚您试图做什么,并且您的示例根本没有解释它。您称之为“显式实例化”,但看起来你实际上是在谈论显式专门化。显式专门化和显式实例化是两件完全不同的事情。所以,再说一次:你想在你的示例中发生什么?@AnT你能不能提供一个关于你提供的缺陷的链接,作为Mike帖子的证据?我无法理解。@Dmitry Fucintv:有一个公开的缺陷是显式实例化的语法过于宽松。到目前为止,这是基于“每个人都理解”的事实,即在显式实例化中包含函数体(或初始化器等)是没有意义的(我希望他们将来收紧定义)不管怎样,你为什么要这样做?你是在问一个关于标准的抽象问题吗?如果是这样,那么你可以从上面的缺陷中找到和平,这与问题的存在是一致的:定义太松散了。@Dmitry Fucintv:你不应该能够用显式实例化语法指定函数体。这没有任何意义。但是标准显然“忘了”禁止它,除非我在正文中遗漏了其他禁止它的地方。@AnT你的解释正是我wsa想要的。谢谢,现在它完全清楚了。