在我的项目中,我有一个抽象基类"Base".我想跟踪从"Base"派生的所有对象的动态分配/解除分配.为此,我重写了"Base"中的new/delete运算符.
在重写的new运算符中成功分配内存后,我想通知我用于跟踪已发生分配的内存的对象,具有最多派生类型的分配及其大小.大小不是问题(因为它直接传递给"Base"的新运算符),但是获得最多派生类型是一个问题.
我倾向于认为这是不可能的,因为我正在尝试这样做.由于尚未构建对象的更多派生部分,因此无法知道它们是什么.然而,"Base"类'重载的新运算符知道最终产品的大小 - 大小 - 所以有可能知道其他任何相关内容吗?
对于上下文:
void* Base::operator new( size_t size )
{
void* storage = malloc( size );
if ( storage == NULL )
throw std::bad_alloc();
// Notify MemoryTracker an allocation has occurred
// MemoryTracker::Instance().Allocate( type, size );
return storage;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在C++中重新创建C#的委托类型的一些行为,并且我在编译时遇到了一个特定的错误 - 这里是相关的代码:
struct Nil { };
// Represents a C# Func
template <typename returnType = void,
typename T1 = Nil,
typename T2 = Nil,
typename T3 = Nil>
class Func
{
public:
vector<function<returnType(T1, T2, T3)>> _funcs;
void operator+=(returnType (*functionPointerToAdd)(T1))
{
auto myFunc = [&] ( returnType (*functionPointerToAdd)(T1) )
-> returnType (*)(T1, T2, T3)
{ functionPointerToAdd(T1); };
// add myFunc to the vector of functions...
}
};
Run Code Online (Sandbox Code Playgroud)
我想要做的是将一个函数指针包装在一个闭包中,该闭包的签名与该类的完整模板类型相匹配(有效地"丢弃"设置为'Nil'的值).我得到的错误是:
error C2275: 'T1' : illegal use of this type as an expression …Run Code Online (Sandbox Code Playgroud)