在我的代码中,我有一个函数:
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
代码应该可以正常工作。但是,我缺少任何副作用吗?
答案 0 :(得分:1)
如果需要,可以使用enable_if仅允许指针或shared_ptr实例进行编译。这样你就可以恢复之前的编译时检查(不过,假设你的函数实现也可以这样做)。
答案 1 :(得分:0)
void foo(T)是pass-by-copy。 T&安培; (如果sizeof(T)不小,则通过引用传递)会更有效。