在我的代码中,我有一个函数:
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代码应该工作得很好。然而,我是否遗漏了什么副作用?
发布于 2011-10-14 12:37:03
如果需要,可以使用enable_if只允许编译shared_ptr的指针或实例。这样,您就可以恢复之前的编译时检查(不过,想必您的函数实现也会这样做)。
发布于 2011-10-14 11:35:31
void foo(T)是通过复制传递的。如果sizeof(T)不是小的,那么T& (通过引用传递)会更有效。
https://stackoverflow.com/questions/7762668
复制相似问题