使用模板的默认值时出错
Error using default value for templates
template <class T, class FPTR = void (void *)>
class CSmartPtr
{
public :
// -----------------------------------------------------------------------
// Constructors and Destructor
// -----------------------------------------------------------------------
CSmartPtr()
{
m_TData = NULL;
m_deleter = NULL;
}
CSmartPtr(T* TData)
{
m_TData = TData;
m_deleter = NULL;
}
CSmartPtr(T* TData, FPTR *deleter)
{
m_TData = TData;
m_deleter = deleter;
}
~CSmartPtr()
{
if (NULL == m_deleter)
{
delete m_TData;
}
else
{
m_deleter(m_TData);
}
}
T *const operator-> () const
{
return m_TData;
}
//-----------------------------------------------------------------------
// Getter methods
//-----------------------------------------------------------------------
T *const get() const
{
return m_TData;
}
void reset(T* TData)
{
if (NULL != m_TData)
{
if (NULL == m_deleter)
{
delete m_TData;
}
else
{
m_deleter(m_TData);
}
}
m_TData = TData;
}
private :
// -----------------------------------------------------------------------
// Private data members
//
// fUnicodeForm
// This is the Unicode XMLCh format of the string.
// -----------------------------------------------------------------------
T *m_TData;
FPTR *m_deleter;
};
int main( void )
{
CSmartPtr<BYTE> apbySrcBuff; // This doesnt work.
CSmartPtr<BYTE, (void) (void *)> apbySrcBuff; // This works.
getchar();
return TRUE;
}
我绝对是templates
新手,我被上述问题困住了,从几个小时开始。试图自己解决,但没有成功。
错误Error 1 error C2064: term does not evaluate to a function taking 1 arguments
该行是 m_deleter(m_TData);
代码顶部需要以下内容:
#include <cstdio>
typedef char BYTE;
bool TRUE = true;
并在注释掉您的一个相同的内容后:
CSmartPtr apbySrcBuff;
行,都编译了。
我已经在 ideone 上测试了它并且运行良好(它以运行时错误终止,但这是您的smart_ptr实现,我没有调试(。
我发现的唯一问题是第二个声明使用了额外的参数,(void)(void*)
并且编译在这里失败(我对第一个声明没有问题(。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- Switch 语句(字符串)一直选择默认值,除非其为零
- 如何使用默认值将枚举声明为 extern
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 如何使用默认值为构造函数中的枚举赋值?
- 变量始终在函数中重置为默认值
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 函数不返回默认值
- 具有公共范围与专用范围的默认值的C++的不同行为
- 使用模板的默认值时出错
- 在模板化类的复制构造函数中使用默认值时出错