我有以下模板类。
template<typename T, typename R = void>
class Event
{
public:
typedef boost::signals2::signal<R (const T&)> signal_t;
virtual R fire(const T& argument)
{
return static_cast<R>(*signal_(argument));
}
private:
signal_t signal_;
...
};
由于R可能无效,我在行
上得到一个无效的间接编译错误return static_cast<R>(*signal_(argument));
它似乎无法通过运行时检查来解决,因为它是一个模板类。 一个人无法返回“类型”无效。 我该如何解决这个问题?
答案 0 :(得分:1)
您可以尝试将模板专门化为:
template<typename T>
class Event<T,void>
{
typedef boost::signals2::signal<void (const T&)> signal_t;
virtual void fire(const T& argument)
{
signal_(argument);
}
private:
signal_t signal_;
...
};
所以,我们用显式替换了R&#34; void&#34;因此,从C ++编译器的角度来看,我们可以看到荒谬或冗余的地方。在您的情况下,它只是一个信号调用而不返回值。在更复杂的场景中,您可能需要重新构建依赖于&#34; R&#34;的更大部分代码。