c++ - 将任何对象类型传递给函数 C++

标签 c++ boost

我正在使用一个提供不同类型信号对象的库。 该库有一个方法:

void sendSignal(boost::shared_ptr<ISignal>)

库提供的每个 Signal 对象都实现了 ISignal 接口(interface)。 ISignal 接口(interface)不提供任何克隆方法。然而,所有实现 ISignal 的对象都有一个复制构造函数。

我想创建一个函数,它采用任何实现 ISignal 的类型,通过调用复制构造函数克隆该对象,并返回新复制的对象。我想在不同的复制对象上多次调用 sendSignal。

代码当前在多个位置调用不同对象的复制构造函数。我希望有一种简单的方法可以将模板传递给函数并让该函数为我复制该对象,方法是假设该对象具有复制构造函数。 但是,我的问题是我无法传递 ISignal 因为它没有指定任何复制构造函数,而且我无法传递实现 ISignal 的特定对象。 如果没有 C++11,我有什么办法可以做到这一点吗?

最佳答案

template<class XSignal,
  class=typename std::enable_if<
    std::is_base_of<ISignal,XSignal>::value
  >::type
>
std::shared_ptr<XSignal> CopySignal( XSignal const& signal ) {
  return std::make_shared<XSignal>(signal);
}

是一个函数,可以接受从 ISignal 派生的任何类的实例并生成共享指针拷贝。

您必须在编译时知道实际的派生类型才能使用此函数。

关于c++ - 将任何对象类型传递给函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377666/

相关文章:

c++ - 强制窗口位于最顶层的窗口之上(如任务管理器)

c++ - Boost::Process 编译问题,必须修改 lib 才能使其工作

c++ - 是否有可能在没有得到 "new"ed 的结构中有一个 boost::variant?

c++ - 使用 std::bind 了解编译器错误

c++ - 有效 C++ : Item 52 and how to avoid hiding all normal operator new & delete versions

python - 编译和运行后 boost python 给我段错误

c++ - boost filesystem - 如何在不解析的情况下获取符号链接(symbolic link)的最后写入时间?

c++ - 为什么io_service可以不用run()来进行同步操作

c++ - 使用 ostringstream 语法将字符串加倍

c++ - 重载在参数中获取指针的运算符