小编Any*_*orn的帖子

boost add_reference不使用template参数

我试图使用类型特征添加对模板参数的引用.

template < class T >
struct S {
typename add_reference< T >::type reference; // reference member should always be a reference
};
...
typedef Bar< Foo > type;
S< type > s; // does not add reference, S:: reference is of type type, not type&
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用.这是正确的方法吗?我的编译器是g ++ 4.3.谢谢.

澄清:无论是否实例化S <type>或S <type&>,我都希望引用成员作为引用.

c++ boost types traits

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

计算哈希值,整数类型与结构/类

我想知道原始整数类型的计算哈希值(例如std :: map key)之间的速度是否存在差异,例如int64_t和pod类型struct { int16_t v[4]; };.那么int128_t与struct {int32_t v[4];}

我知道这将是特定于实现的,所以我的问题最终与gnu标准库有关.谢谢

我发现的链接非常有用 如何在boost :: unordered_map中使用自定义类型的键?

c++ hash performance primitive-types

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

如何实例化模板模板

我有这样的模板:

100 template<size_t A0, size_t A1, size_t A2, size_t A3>
101 struct mask {
103     template<size_t B0, size_t B1, size_t B2, size_t B3>
104     struct compare {
105         static const bool value = (A0 == B0 && A1 == B1 && A2 == B2 && A3 == B3);
106     };
107 };
...
120 const typename boost::enable_if_c<
121 mask<a,b,c,d>::compare<2,3,0,1>::value || ...>::type
Run Code Online (Sandbox Code Playgroud)

我试图实例化比较结构.如何在第121行获得价值?

c++ templates instantiation

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

C++ catch构造函数异常

我似乎不明白如何捕获构造函数异常.这是相关代码:

     struct Thread {
            rysq::cuda::Fock fock_;
            template<class iterator>
            Thread(const rysq::cuda::Centers &centers,
                   const iterator (&blocks)[4])
                : fock_()
            {
                if (!fock_) throw;
           }
      };

      Thread *ct;
      try { ct = new Thread(centers_, blocks); }
      catch(...) { return false; } // catch never happens,
Run Code Online (Sandbox Code Playgroud)

所以catch语句不执行,我得到未处理的异常.我做错了什么?这是使用g ++的直接C++.

c++ constructor exception

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

为什么优化不会发生?

我有C/C++代码,看起来像这样:

static int function(double *I) {
    int n = 0;
    // more instructions, loops,
    for (int i; ...; ++i)
        n += fabs(I[i] > tolerance);
    return n;
}

function(I); // return value is not used.
Run Code Online (Sandbox Code Playgroud)

编译器内联函数,但它没有优化n操作.我希望编译器能够识别该值从不用作rhs.是否有一些副作用,这会妨碍优化?

编译器似乎并不重要,我试过Intel和gcc.积极优化, -O3

谢谢

更完整的代码(完整代码是重复这样的块):

  280         // function registers
  281         double q0 = 0.0;
  282         double q1 = 0.0;
  283         double q2 = 0.0;
  284
  285 #if defined (__INTEL_COMPILER)
  286 #pragma vector aligned
  287 #endif // alignment attribute
  288         for (int a = 0; …
Run Code Online (Sandbox Code Playgroud)

c c++ compiler-construction optimization

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

C++ boost或STL`y + = f(x)`类型算法

我知道我可以y[i] += f(x[i])使用两个输入迭代器进行转换.然而,它似乎有点违反直觉,比循环更复杂.

有没有更自然的方法来使用boost或Stl中的现有算法.我找不到干净的等价物.

这里是变换(y = y + a*x):

using boost::lambda;
transform(y.begin(), y.end(), x.begin(), y.begin(), (_1 + scale*_2);
//  I thought something may exist:
transform2(x.begin(), x.end(), y.begin(), (_2 + scale*_1);
// it does not, so no biggie. I will write wrapper
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ algorithm boost

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

Python,pythonic表达式

这个片段有pythonic表达式吗?

# linux.cmd is a dict
cmd = linux.cmd.get(k, k)
if not cmd:
    cmd = k
Run Code Online (Sandbox Code Playgroud)

价值linux.cmd.get[k]可能是False.

python

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

矩阵mul最大值估计

给定矩阵乘积C = A*B,有没有N^2办法估算C的最大值?或者更确切地说,这样做的好方法是什么?

c matrix numerical-analysis

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

C++命名空间歧义

我有两个::tensor::contract::tensor::detail::contract

#include "tensor/detail/contract.hpp"

namespace tensor {


    template<typename Alpha, class A, class B, typename Beta, class C>
    void contract(Alpha alpha, A a, B b, Beta beta, C c) {
        detail::contract(alpha, a, b, beta, c);
    }

    template<class A, class B, typename U = int>
    struct contract_expression :
        expression<contract_expression<A,B,U> >
    {
        template<typename T, class C>
        void evaluate(T alpha, T beta, expression<C> &c) const {
            contract(alpha*alpha_, a, b, beta, c); // ambiguity here
        };
    };
Run Code Online (Sandbox Code Playgroud)

为什么我会模棱两可contract_expression::evaluate?我相当确定没有流浪using指令.

错误: …

c++

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

更好的折叠循环索引计算

我有以下循环:

for (int ij =  begin; ij < ni*nj; ij += step) {
    int j = ij/ni;
    int i = ij - j*ni;
    ...
}
Run Code Online (Sandbox Code Playgroud)

i,j没有div/mod 可以计算什么其他选项?

展开循环不是一种选择.

c c++ optimization performance

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