【发布时间】:2014-08-29 02:08:03
【问题描述】:
所以,假设我有这样的事情:
template <class T>
class SingletonHolder : public T
{
public:
static SingletonHolder<T>& getInstance()
{
static SingletonHolder<T> instance;
return instance;
}
private:
SingletonHolder()
{
}
virtual ~SingletonHolder()
{
}
};//class SingletonHolder
并说我有一些虚拟课程:
class SomeClassForCheck
{
public:
int someF()
{
return 5;
}
};
然后单例的用法:
typedef SingletonHolder< SomeClassForCheck > SomeClassSingleton;
然后当我从 SomeClasse 的 CPP 文件(在任何函数之外)调用此代码时: [背后的想法是基本上使用这个技巧将创建者函数注册到单例工厂类]
//此代码是从匿名命名空间调用的,在 .CPP 文件中 SomeClassSingleton::getInstance().someF();
Visual C++ 报错:
此声明没有存储类或类型说明符
此代码在 GCC 和 C++ Builder 下工作。到目前为止,我还没有在 Visual C++ 中工作过,所以我做错了什么:)?
谢谢! 独山
【问题讨论】:
-
在 VS 2013 中为我编译。您使用的是哪个版本?
-
同一个:) WTF? :D
-
嗯,我刚刚剪切并粘贴了您的帖子,删除了文本并在最后一行周围添加了一个主要功能。也许尝试在一个新项目中这样做,以确保您的 VS 安装没有问题。
-
实际上,当我尝试将其直接放入 .cpp 文件(在任何函数或任何东西之外的匿名命名空间中)时,它似乎会出现错误。我尝试完成 SingletonFactory::getInstance().registerNew(id,functionCreator) 的事情
-
如果您只是将该行放在函数之外,则它不是有效代码。它要么需要在函数内部调用(如 main),要么可能作为另一个声明的一部分,如 'int x = SomeClassSingleton::getInstance().someF();'代码本身(在函数之外)看起来像是
getInstance函数的不完整声明。
标签: c++ templates visual-c++ generics singleton