我正在使用一个提供不同类型信号对象的库。 该库有一个方法:
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/