小编Wel*_*lls的帖子

在对象构造期间获取最多派生类型

在我的项目中,我有一个抽象基类"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++ memory-management

5
推荐指数
1
解决办法
320
查看次数

在lambda中使用类模板参数时编译错误

我正在尝试在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)

c++ lambda templates delegates c++11

3
推荐指数
1
解决办法
351
查看次数

标签 统计

c++ ×2

c++11 ×1

delegates ×1

lambda ×1

memory-management ×1

templates ×1