gpt4 book ai didi

c++ - 在基类(模板)中定义但具有派生类类型的静态数据成员

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:38 25 4
gpt4 key购买 nike

我有这样的代码:

//工厂.h

template <typename TFactoryTable, typename TBaseProduct>
class FactoryTable {
public:
static TFactoryTable instance;
};

template <typename TFactoryTable, typename TBaseProduct>
TFactoryTable FactoryTable<TFactoryTable, TBaseProduct>::instance;

//Foo.h

class BaseFoo {};
class FooFactoryTable : public FactoryTable<FooFactoryTable, BaseFoo> {};

//条形图.h

class BaseBar {};
class BarFactoryTable : public FactoryTable<BarFactoryTable, BaseBar> {};

// main.cpp

void test() {
auto& t = FooFactoryTable::instance;
}

我将静态成员“实例”的定义放在 FactoryTable<> 中,这样我就可以强制工厂表(FooFactoryTable、BarFactoryTable...)使用相同的方式来定义它的单例。这些代码由 visual studio 2012(v110) 编译得很好,但是编辑器(IntelliSense 不是编译器)在 test() 中的 FooFactoryTable::instance 上报告错误:

Error: class "FooFactoryTable" has no member "instance"

如果我将实例的声明和定义更改为“FactoryTable”类型(不是 TFactoryTable),那么编辑器将不会报告错误。所以我担心,这是(编译良好)仅 msvc 的功能,还是标准的 C++ 功能?因为代码的目标平台是android和iphone,需要用gcc编译。

最佳答案

Intellisense 很容易被更复杂的构造(尤其是预处理器或模板)混淆,并且喜欢报告虚假错误。像这个。您使用 TFactoryTable 作为静态成员类型的代码是 100% 合法的 C++。

关于c++ - 在基类(模板)中定义但具有派生类类型的静态数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19132528/

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