铸造返回值为模板类型

Cast return value to templated type

本文关键字:类型 返回值      更新时间:2023-10-16

我有以下模板类。

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

似乎无法通过运行时检查解决,因为它是模板类。一个人无法返回" type" void。我该如何解决?

您可以尝试使用类似的模板进行专业化:

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_;
   ...    
};

因此,我们用明确的" void"值替换了R,因此我们可以从C 编译器的视图中看到荒谬或冗余的位置。就您而言,这只是一个信号呼叫而没有返回值。在更复杂的方案中,您可能需要重新组合基于" R"的代码的更大部分。