0

在我的代码中,我有一个函数:

template<typename T>
void foo (T*); // make sure that 'foo()' is passed only pointers

现在在新的实现中,我还传递了一个智能指针(类似于shared_ptr<>. 所以我已将函数的签名更改为,

template<typename T>
void foo (T);  // pointers or smart-pointers

代码应该可以正常工作。但是,我有什么副作用吗?

4

2 回答 2

1

如果需要,您可以使用 enable_if 仅允许 shared_ptr 的指针或实例进行编译。这样,您就可以恢复以前的编译时检查(尽管,您的函数实现可能也会这样做)。

于 2011-10-14T04:37:03.350 回答
0

void foo(T) 是通过复制。如果 sizeof(T) 不小,T&(通过引用传递)会更有效。

于 2011-10-14T03:35:30.967 回答