将 return 值转换为模板类型

Cast return value to templated type

我有以下模板 class。

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));   

似乎无法通过 运行 次检查来解决,因为它是一个模板 class。 不能 return "type" 作废。 我该如何解决?

您可以尝试像这样专门化模板:

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 替换为显式 "void" 值,因此我们可以从 C++ 编译器的角度看到荒谬或冗余的地方。在您的情况下,这只是一个不返回值的信号调用。在更复杂的场景中,您可能需要重新编写依赖于 "R".

的大部分代码