小编use*_*108的帖子

迭代可变参数模板的类型参数

我有一个这样的功能模板:

template <class ...A>
do_something()
{
  // i'd like to do something to each A::var, where var has static storage
}
Run Code Online (Sandbox Code Playgroud)

我不能用Boost.MPL.你能告诉我如何在没有递归的情况下做到这一点吗?

c++ templates variadic-templates c++11

18
推荐指数
2
解决办法
1万
查看次数

类模板的静态成员错误

我对此代码段有疑问:

template <typename T>
struct S
{
  static int a;
};

template <typename T>
decltype(S<T>::a) S<T>::a;
Run Code Online (Sandbox Code Playgroud)

clang-3.4 说:

s.cpp:8:25: error: redefinition of 'a' with a different type: 'decltype(S<T>::a)' vs 'int'
decltype(S<T>::a) S<T>::a;
                        ^
s.cpp:4:14: note: previous definition is here
  static int a;
             ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

gcc-4.8.2接受.哪个编译器是对的?我将来应该避免这样的代码吗?

c++ language-lawyer c++11

18
推荐指数
1
解决办法
448
查看次数

SFINAE远离复制构造函数

在某些条件下,我想要SFINAE远离类模板的复制构造函数和复制赋值运算符.但是如果我这样做,则会生成默认的复制构造函数和默认赋值运算符.SFINAE基于我作为类模板参数传递的标签完成.问题是,SFINAE仅适用于模板,复制构造函数/赋值运算符不能作为模板.是否存在变通方法?

c++ templates copy-constructor sfinae overload-resolution

14
推荐指数
2
解决办法
902
查看次数

不可复制的,但可移动的容器

我有这个程序的问题:

struct A {};

int main()
{
  ::std::vector< ::std::unique_ptr<A> > v;

  ::std::cout << ::std::is_copy_constructible<decltype(v)>{} << ::std::endl;

  //decltype(v) w(v);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这输出:

1
Run Code Online (Sandbox Code Playgroud)

但是,如果我取消注释注释行,程序将无法编译.您是否认为,标准中的错误是::std::is_copy_constructible<decltype(v)>{}评估true标准中的哪个位置?例如,应该修复元函数,还是容器应该删除它的复制构造函数,如果value_type它不可复制?

编辑:我想我应该澄清为什么这很重要.比如说,你有一个类模板variant,它包含一个用不可复制的实例化的容器类模板value_type.该variantSFINAE走法是复制的容器,避免编译错误,但因为它从接收信息错误STL,它不能.由于这个问题,我不得不写一个特殊的moving_variant类模板,它只移动,从不复制,而它可能/应该可以有一个variant类模板.

c++ containers stl language-lawyer c++11

13
推荐指数
1
解决办法
404
查看次数

Eigen中的交叉积矩阵

Hat运算符的 Eigen中是否有现成的函数或方法?这是运算符,返回一个矩阵,模拟与该向量的叉积.我知道,它可以很容易编写,但我想避免它:

Eigen::Vector3d t = // some vector ;
Eigen::Matrix3d t_hat;
t_hat << 0, -t(2), t(1),
    t(2), 0, -t(0),
    -t(1), t(0), 0;
Run Code Online (Sandbox Code Playgroud)

c++ cross-product eigen

13
推荐指数
1
解决办法
8708
查看次数

返回初始化列表机制

涉及什么机制,如果返回类型,可以从初始化列表中构造,我没有指定我返回的类型,如:

std::array<int, 3> make_array()
{
  return { 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)

代替

std::array<int, 3> make_array()
{
  return std::array<int, 3>{ 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)

如果我在没有指定类型的情况下返回初始化列表,是否涉及任何性能损失?我实际上是在返回一个数组,即转换为std::array

c++ c++11

12
推荐指数
1
解决办法
2926
查看次数

std :: initializer_list和引用类型

可以std::initializer_list包含引用类型(rvalue和lvalue)吗?或者是否必须使用指针或引用包装器(例如std::ref)?

编辑:

可能需要进一步澄清:

我有一个成员变量,::std::vector<std::function<void()> >我想转发一个lambda对象.这通常可以用emplace_back,但我想在构造函数的初始化列表中完成.唉,正如我所读到的,这将使转发变得不可能.

c++ initializer-list c++11

12
推荐指数
2
解决办法
3613
查看次数

奇怪的编译代码

我用google的nacl编译器编译了一些Qt代码,但是ncval验证器并没有理解它.许多人中的一个例子:

src/corelib/animation/qabstractanimation.cpp:165
Run Code Online (Sandbox Code Playgroud)

这是相关的代码:

#define Q_GLOBAL_STATIC(TYPE, NAME)                                  \
    static TYPE *NAME()                                              \
    {                                                                \
        static TYPE thisVariable;                                    \
        static QGlobalStatic<TYPE > thisGlobalStatic(&thisVariable); \
        return thisGlobalStatic.pointer;                             \
    }

#ifndef QT_NO_THREAD
Q_GLOBAL_STATIC(QThreadStorage<QUnifiedTimer *>, unifiedTimer)
#endif
Run Code Online (Sandbox Code Playgroud)

编译为:

00000480 <_ZL12unifiedTimerv>:
     480:       55                      push   %ebp
     481:       89 e5                   mov    %esp,%ebp
     483:       57                      push   %edi
     484:       56                      push   %esi
     485:       53                      push   %ebx
     486:       83 ec 2c                sub    $0x2c,%esp
     489:       c7 04 24 28 00 2e 10    movl   $0x102e0028,(%esp)
     490:       8d 74 26 00             lea    0x0(%esi,%eiz,1),%esi
     494: …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly qt google-nativeclient

10
推荐指数
1
解决办法
301
查看次数

实用的BigNum AVX/SSE可能吗?

SSE/AVX寄存器可以被视为整数或浮点BigNums.也就是说,人们可以忽视存在通道.是否有一种简单的方法可以利用这种观点并将这些寄存器单独或组合用作BigNum?我问,因为我从BigNum库中看到的很少,它们几乎普遍存储并对数组进行算术运算,而不是SSE/AVX寄存器.可移植性?

例:

假设您将SSE寄存器的内容存储为a中的键std::set,您可以将这些内容作为BigNum进行比较.

sse simd biginteger avx extended-precision

10
推荐指数
2
解决办法
3167
查看次数

如何通过前进或移动捕获参数包?

说我有这个功能:

template <typename ...A>
void test(A&& ...a)
{
  [=]()
  {
  };
}
Run Code Online (Sandbox Code Playgroud)

参数包是转发到lambda还是只是按值复制?我担心,因为我必须明确move()forward()通常,和a...左值.是一个转发/移动它们的元组中介吗?如果是这样,是否有一种简单的方法可以将元组解压缩到参数包中,而不使用索引技巧?

c++ c++17

10
推荐指数
2
解决办法
1759
查看次数