gpt4 book ai didi

c++ - 定义类模板构造函数并提供模板参数

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:57 25 4
gpt4 key购买 nike

C++ 似乎并不关心我是否为类模板的构造函数提供模板参数。这是一个例子:

template<typename T>
class Foo
{
Foo() { /* ... */ } // OK
Foo<T> { /* ... */ } // Also OK
}

这两个构造函数定义之间有区别吗?另外,在提供模板参数的主题上,当声明在同一个类中时,为什么不必将参数提供给类模板参数?下面的例子:

template<typename T>
class Foo
{
Foo(const Foo& other) { /* ... */ } // OK
Foo(const Foo<T>& other) { /* ... */ } // Also OK
void Foobar(const Foo& foo) { /* ... */ } // Still OK
};

// Somewhere outside Foo...
void Foobar(const Foo& foo) { /* ... */ } // Not OK

这是否与它是当前实例化的一部分有关?

最佳答案

每个类都有一个注入(inject)的类名,这是一个引用类本身的成员typedef。对于非模板类 Foo ,注入(inject)的类名也是Foo .对于 Foo<T> (类模板的特化 Foo ),注入(inject)的类名是 Foo (也就是说,没有模板参数)。因此,类内 Foo<T> , 名字 FooFoo<T>都可以用来指类 Foo<T>本身。

关于c++ - 定义类模板构造函数并提供模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53546804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com