用foo(T)替换模板函数foo(T *)

时间:2011-10-14 03:10:43

标签: c++ templates pointers method-signature

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

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

代码应该可以正常工作。但是,我缺少任何副作用吗?

2 个答案:

答案 0 :(得分:1)

如果需要,可以使用enable_if仅允许指针或shared_ptr实例进行编译。这样你就可以恢复之前的编译时检查(不过,假设你的函数实现也可以这样做)。

答案 1 :(得分:0)

void foo(T)是pass-by-copy。 T&安培; (如果sizeof(T)不小,则通过引用传递)会更有效。