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想要的。谢谢,现在它完全清楚了。