如何将第二个参数声明为可选项?
template <typename T>
inline void Delete (T *&MemoryToFree,
T *&MemoryToFree2 = ){
delete MemoryToFree;
MemoryToFree = NULL;
delete MemoryToFree2;
MemoryToFree2 = NULL;
}
我在=运算符之后尝试了几个东西,比如NULL,(T *)NULL等。可以这样做吗?
编译器允许我这样做的唯一方法是使用重载...
template <typename T, typename T2>
inline void Delete (T *&MemoryToFree, T2 *&MemoryToFree2){
delete MemoryToFree;
MemoryToFree = NULL;
delete MemoryToFree2;
MemoryToFree2 = NULL;
}
答案 0 :(得分:12)
你可以重载函数
template <typename T>
inline void Delete (T *&MemoryToFree){
delete MemoryToFree;
MemoryToFree = NULL;
}
template <typename T, typename T2>
inline void Delete (T *&MemoryToFree, T2 *&MemoryToFree2){
delete MemoryToFree;
MemoryToFree = NULL;
delete MemoryToFree2;
MemoryToFree2 = NULL;
}
答案 1 :(得分:8)
您总是可以编写一个简单的“按需静态左值生成器”并将其用作参数的默认值
template <typename T> inline T& get_lvalue() {
static T t;
return t;
}
在您的代码中
template <typename T>
inline void Delete(T *&MemoryToFree, T *&MemoryToFree2 = get_lvalue<T*>())
答案 2 :(得分:2)
不,这是不可能的。您不能将默认参数与引用一起使用。
答案 3 :(得分:0)
使用gcc 4.3.2,以下代码对我来说很合适。
void fn( int*const & i = 0 )
{
delete i;
}
所以也许你可以适应它。您需要*const
来允许默认参数。
引用-const。
修改强>
刚才意识到将它标记为*const
对你没用,因为你希望能够使指针和delete
无效。