我有一些这样的代码:
// 工厂.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> {};
// Bar.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 不是编译器)在测试()中的 FooFactoryTable::instance 上报告错误:
Error: class "FooFactoryTable" has no member "instance"
如果我将实例的声明和定义更改为“FactoryTable”类型(不是 TFactoryTable),则编辑器不会报告错误。所以我担心,这(编译好)是仅 msvc 的功能,还是标准的 c++ 功能?因为代码的目标平台是android和iphone,需要gcc编译。