铸造返回值为模板类型
Cast return value to templated type
我有以下模板类。
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"的代码的更大部分。
相关文章:
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 函数的返回值类型是别名 ***或 *** 布尔值
- 如何为具有常量类型的函数正确转换来自 DLsym 的返回值?
- Pybind11:作为返回值的外部类型
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 更改 Python 切换的 C 函数的返回值类型
- 如果我忽略返回类型shared_ptr函数的返回值怎么办
- 返回类型为 int 的函数中的默认返回值 1?
- 重载运算符返回什么类型的值(对于用户定义的类型):右值还是左值?
- 编写一个函数,该函数将通过判断其每个参数的类型来自动确定其返回值
- 为什么当返回类型为 const 时可以修改返回值
- C 语法,根据此代码返回值类型
- 函数返回值的自动类型扣除
- 如何在另一个成员函数中修改具有常量返回类型的成员函数的返回值
- 使用模板返回值从函数中删除类型
- 铸造返回值为模板类型
- 如何在模板类中使用嵌套的结构/类类型作为返回值
- C 策略设计具有可变类型返回值
- C++模板:按类型返回值