相关疑难解决方法(0)

部分模板的C++ typedef

我需要做一个像这样的typedef.

template< class A, class B, class C >
class X
{
};

template< class B, class C >
typedef X< std::vector<B>, B, C >  Y;
Run Code Online (Sandbox Code Playgroud)

我刚刚发现它在C++中不受支持.有人可以告诉我如何通过替代手段实现同样的目标吗?

谢谢,Gokul.

c++ templates typedef

17
推荐指数
2
解决办法
6556
查看次数

有没有比metafactory更好的方法来解决CRTP中派生类的构造函数注入问题?

CRTP中,我想干净地将构造函数注入到派生类中 - 不使用宏而不将其写出来.这似乎是不可能的,所以我想出了一些解决方法.

首先,有一个底层事件类(QEvent),它应该为每个派生类都有一个唯一的整数类型标记(参见基本原理).你可以通过调用注册函数来获取它很容易创建一个CRTP包装器来隐藏它:

template <typename Derived> class EventWrapper : public QEvent {
public:
    EventWrapper() : QEvent(staticType()) {}
    static QEvent::Type staticType() {
        static QEvent::Type type = static_cast<QEvent::Type>(registerEventType());
        return type;
    }
};
class MyEvent1 : public EventWrapper<MyEvent1> {}; // easy-peasy
class MyEvent2 : public EventWrapper<MyEvent2> {};
Run Code Online (Sandbox Code Playgroud)

请注意MyEvent1::staticType() != MyEvent2::staticType():registerEventType()每次调用时都会返回唯一类型.

现在我希望事件类携带一些数据:

template <typename Derived> class StringEvent : public EventWrapper<D> {
    std::string m_str;
public:
    explicit StringEvent(const std::string & str) : m_str(str) {}
    std::string …
Run Code Online (Sandbox Code Playgroud)

c++ qt c++11

11
推荐指数
1
解决办法
601
查看次数

C++标准库和Boehm垃圾收集器

我想开发一个多线程C++应用程序(最终大部分C++代码将由应用程序本身生成,可以被视为高级域特定语言)在Linux/AMD64/Debian上使用GCC 4.6(和可能是最新的C++ 11标准).

我真的想在我的所有堆分配中使用Boehm的保守垃圾收集器,因为我想分配new(GC)并且从不打扰delete.我假设Boehm的GC工作得很好.

使用(而不是C)C++的主要动机是在所有的算法和集合std::map... std::vector由C++标准库提供.

Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc/gc_allocator.h中).

我应该重新定义operator ::new为Boehm吗?

或者我应该使用所有集合模板,并将显式的allocator模板参数设置为某些gc_allocator?我不完全理解第二个模板参数(分配器)对std :: vector的作用?它是用来分配矢量内部数据,还是分配每个单独的元素?

什么是std::string-s?如何使他们的数据GC分配?我应该使用basic_string模板gc_allocator吗?有没有办法让内部数组的char分配GC_malloc_atomicGC_malloc

或者您是否建议不要将Boehm GC与g ++编译的应用程序一起使用?

问候.

c++ linux garbage-collection g++

6
推荐指数
1
解决办法
3918
查看次数

标签 统计

c++ ×3

c++11 ×1

g++ ×1

garbage-collection ×1

linux ×1

qt ×1

templates ×1

typedef ×1