小编Any*_*orn的帖子

C++提升线程重用线程

我想要完成这样的事情:

thread t; // create/initialize thread
t.launch(); // launch thread.
t.wait(); // wait
t.launch(); // relaunch the same thread
Run Code Online (Sandbox Code Playgroud)

如何使用boost线程来实现这样的东西?本质上,我需要持久的重新启动线程.

我想避免工作队列,因为在我的情况下实现有点困难

谢谢

c++ multithreading boost

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

抛出异常后的LHS状态

我正在学习C++异常,我想对这个场景做一些澄清:

T function() throw(std::exception);
...
T t = value;
try { t = function(); }
catch (...) {}
Run Code Online (Sandbox Code Playgroud)

如果抛出异常,变量t的状态是什么?未定义或未定义?

c++ exception

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

C++"延迟"模板参数

有没有直接的方法来做到以下几点:

template < class >
struct f {};

template < class F >
void function() {
    F<int>();  //for example
    // ? F template <int>();
}

function < f >();
Run Code Online (Sandbox Code Playgroud)

我通过使用模板结构的额外类来解决方法.我想知道是否有可能直接这样做.

谢谢

c++ templates

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

C++父类对齐

是否可以指定父类的对齐?例如像(没有编译)的东西:

template<size_t n>
class Vector : public boost::array<double,n> __attribute__ ((aligned(16)))
{
Run Code Online (Sandbox Code Playgroud)

谢谢

好吧,从我收集的评论来看,这不是一个好方法.我想我会坚持私有数组的组合/对齐

c++ inheritance alignment

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

C++ boost :: lambda :: ret等效于凤凰

Boost lambda允许使用ret<T>模板覆盖推断的返回类型.我曾尝试在凤凰中搜索等效物,但找不到它.

在凤凰中有相同的东西吗?我知道怎么做自己的替换,但我宁愿不做.谢谢

c++ boost-spirit boost-lambda boost-phoenix

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

C++模糊模板实例化

下面给出了使用nvcc(EDG前端和g ++的组合)的模糊模板实例化.它真的很模糊,还是编译器错了?我还发布了解决方案àlaboost :: enable_if

template<typename T> struct disable_if_serial { typedef void type; };
template<> struct disable_if_serial<serial_tag> { };

template<int M, int N, typename T>
__device__
//static typename disable_if_serial<T>::type
void add_evaluate_polynomial1(double *R,
                         const double (&C)[M][N], double x,
                         const T &thread) {
    // ...
}

template<size_t M, size_t N>
__device__
static void add_evaluate_polynomial1(double *R,
                                     const double (&C)[M][N], double x,
                                     const serial_tag&) {
    for (size_t i = 0; i < M; ++i)
        add_evaluate_polynomial1(R, C, x, i);
}

// ambiguous template instantiation here.
add_evaluate_polynomial1(R, …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

带有identity参数的C++模板实例化

我遇到了另一个我不明白的问题.

以下没有实例化(参数实例化失败),为什么?

template<class E>
void operator[](typename boost::mpl::identity<E>::type e) const;
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

c++ templates

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

带有boost :: noncopyable的C++工厂函数

假设我需要实现工厂函数,它返回继承/具有继承自boost :: noncopyable的成员的对象O.

struct O : boost::noncopyable {};
O factory() { return O(); }
Run Code Online (Sandbox Code Playgroud)

显然返回值无法编译.

您知道或使用哪种方法来实施此类工厂方法?如果可能的话,我真的想避免重写复制构造函数并返回值而不是引用或指针.

经过一些修补和来自codeka的链接我管理了这个(不知道这有多便携,似乎与g ++一起工作):

template<class E>
struct threads_parallel_for_generator
    : for_generator<E, threads_parallel_for_generator<E> > {

    typedef for_generator<E, threads_parallel_for_generator> base_type;

    struct factory_constructor {
        explicit factory_constructor(const E &expression)
            : expression_(expression) {}
        operator const E&() const { return expression_; }
    private:
        E expression_;
    };

    threads_parallel_for_generator(const factory_constructor & constructor)
        : base_type(constructor, *this) {}

private:
    boost::mutex mutex_;
};


template<class E>
static threads_parallel_for_generator<E>
parallel_for(const E &expression) {
    typedef threads_parallel_for_generator<E> generator;
    return typename generator::factory_constructor(expression);
}
Run Code Online (Sandbox Code Playgroud)

c++ boost factory

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

typedef模板类的声明

从两个声明之间的元编程前景来看,是否存在差异?

template<typename T>
struct matrix {
    typedef matrix self_type;    // or
    typedef matrix<T> self_type;
};
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ templates

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

clang ++ 4.1,NULL取消引用没有崩溃?

我很好奇为什么在clang ++/OSX下面以下不会导致sigsegv:

int *p = (int*)0;
cout << *p;
Run Code Online (Sandbox Code Playgroud)

但这样做:

int *p = (int*)1;
cout << *p;
Run Code Online (Sandbox Code Playgroud)

铿锵版是4.1

c++ clang

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