gpt4 book ai didi

c++ - 通过函数传递未命名的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:07 27 4
gpt4 key购买 nike

如何将此实例作为参数传递给函数?

class
{
public:
void foo();
} bar;

我必须给类(class)命名吗?
它是可复制的,因为我没有将类(class)的复制构造函数设为私有(private)。
那怎么可能呢?

最佳答案

如果你明确你想做什么,也许会更好。为什么要创建一个未命名的类?它是否符合接口(interface)?未命名的类非常有限,它们不能用作函数的参数,不能用作模板类型参数...

现在如果你正在实现一个接口(interface),那么你可以传递对该接口(interface)的引用:

class interface {
public:
virtual void f() const = 0;
};
void function( interface const& o )
{
o.f();
}
int main()
{
class : public interface {
public:
virtual void f() const {
std::cout << "bar" << std::endl;
}
} bar;
function( bar ); // will printout "bar"
}

注意:对于所有将模板参数视为一个选项的答案,未命名的类不能作为模板类型参数传递。

C++ 标准。 14.3.1,第 2 段:

2 A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.

如果您使用 comeau 进行测试编译器(链接是在线试用)你会得到如下错误:

error: a template argument may not reference an unnamed type

附带说明一下,comeau 编译器是我所知道的最符合标准的编译器,而且是我尝试过的错误诊断最有用的编译器。

注意:Comeau 和 gcc (g++ 4.0) 给出了上面代码的错误。英特尔编译器(以及其他人对 MSVS 2008 的评论)接受使用未命名类作为模板参数,这违反了标准。

关于c++ - 通过函数传递未命名的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991062/

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