从指针转换为引用
Cast from pointer to reference
我有一个通用的单例 class,我将用于许多单例 class。当从指针转换为引用时,泛型 class 会出现编译错误。
Error 3 error C2440: 'static_cast' : cannot convert from 'IApp *' to 'IApp &'
下面是泛型class,编译错误发生在instance()
函数中。
template<typename DERIVED>
class Singleton
{
public:
static DERIVED& instance()
{
if (!_instance) {
_instance = new DERIVED;
std::atexit(_singleton_deleter); // Destruction of instance registered at runtime exit (No leak).
}
return static_cast<DERIVED&>(_instance);
}
protected:
Singleton() {}
virtual ~Singleton() {}
private:
static DERIVED* _instance;
static void _singleton_deleter() { delete _instance; } //Function that manages the destruction of the instance at the end of the execution.
};
这样可以投吗?我不想要 instance()
到 return 一个指针,我更喜欢一个参考。或者 weak_ptr
?知道如何投射这个吗?
您正在寻找的是使用间接运算符 *
对指针进行 取消引用 。你想要
return static_cast<DERIVED&>(*_instance);
// ^^^^^
或
return *static_cast<DERIVED*>(_instance);
// ^^^^^
或简单地:
return *_instance;
// ^^^^^
因为 _instance
已经 有类型 Derived *
并且上面的两个转换是空操作。
我有一个通用的单例 class,我将用于许多单例 class。当从指针转换为引用时,泛型 class 会出现编译错误。
Error 3 error C2440: 'static_cast' : cannot convert from 'IApp *' to 'IApp &'
下面是泛型class,编译错误发生在instance()
函数中。
template<typename DERIVED>
class Singleton
{
public:
static DERIVED& instance()
{
if (!_instance) {
_instance = new DERIVED;
std::atexit(_singleton_deleter); // Destruction of instance registered at runtime exit (No leak).
}
return static_cast<DERIVED&>(_instance);
}
protected:
Singleton() {}
virtual ~Singleton() {}
private:
static DERIVED* _instance;
static void _singleton_deleter() { delete _instance; } //Function that manages the destruction of the instance at the end of the execution.
};
这样可以投吗?我不想要 instance()
到 return 一个指针,我更喜欢一个参考。或者 weak_ptr
?知道如何投射这个吗?
您正在寻找的是使用间接运算符 *
对指针进行 取消引用 。你想要
return static_cast<DERIVED&>(*_instance);
// ^^^^^
或
return *static_cast<DERIVED*>(_instance);
// ^^^^^
或简单地:
return *_instance;
// ^^^^^
因为 _instance
已经 有类型 Derived *
并且上面的两个转换是空操作。