小编Ric*_*y65的帖子

Variadic模板多维数组容器

在C++ 0x Variadic Templates Proposal paper Link中,有一个类的例子,它支持任意数量的维度.我在下面复制了它:

template<typename T, unsigned PrimaryDimension, unsigned... Dimensions>
class array { /* implementation */ };

array<double, 3, 3> rotation matrix; // 3x3 rotation matrix
Run Code Online (Sandbox Code Playgroud)

遗憾的是没有提供实施.由于我对可变参数模板相对较新,我有兴趣看到这个容器的实现.

感谢任何能提供简单实施的人.

c++ multidimensional-array variadic-templates c++11

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

使用字符串文字初始化构造函数中的std :: array <char,x>成员.GCC错误?

以下std::array <char, N>使用字符串文字在构造函数中初始化成员的示例不能在GCC 4.8上编译,而是使用Clang 3.4进行编译.

#include <iostream>
#include <array>

struct A {
  std::array<char, 4> x; 
  A(std::array<char, 4> arr) : x(arr) {}
};


int main() {
    // works with Clang 3.4, error in GCC 4.8.
    // It should be the equivalent of "A a ({'b','u','g','\0'});"
    A a ({"bug"});
    for (std::size_t i = 0; i < a.x.size(); ++i)
        std::cout << a.x[i] << '\n';

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

在第一印象,它看起来像一个GCC错误.我觉得它应该编译,因为我们可以std::array<char, N>直接用字符串文字初始化.例如:

std::array<char, 4> test = {"bug"}; //works
Run Code Online (Sandbox Code Playgroud)

我很想知道标准对此有何看法.

c++ gcc compiler-bug c++11 stdarray

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

使用C++ 11 initializer_list实现类似std :: array的容器

唯一且非常不方便的警告std::array是,它不能从内置C数组的初始化列表中推断出它的大小,它的大小必须作为模板传递.

是否可以使用C++11initializer_list 实现类似std :: array的容器(内置C数组周围的薄包装器)?

我问,因为,与std :: array不同,它会自动从初始化列表中推断出数组的大小,这样更方便.例如:

// il_array is the hypothetical container
// automatically deduces its size from the initalizer list 
il_array <int> myarr = {2, 4, 6, 7, 8}; 
Run Code Online (Sandbox Code Playgroud)

如果没有提供初始化列表,我们还希望提供一个构造函数来指定大小.例如:

// construct a fixed size array of size 10
il_array <int> myarr2 (10); 
Run Code Online (Sandbox Code Playgroud)

这也将使容器与其他标准容器(例如vector,deque和list)更加一致.

据我所知,由于包裹的C数组(如T elems [size])必须具有恒定大小且initializer_list的size()成员函数不是常量,因此不可能.

另外,我想知道是否有可能使用可变参数模板来实现这样的容器,尽管从我读过的内容我不认为这是可能的.

c++ arrays initializer-list variadic-templates c++11

8
推荐指数
1
解决办法
3490
查看次数

在C++中为什么不"断言"关键字?

现在"static_assert"是C++ 0x中的关键字我认为用"assert"关键字替换C"assert"宏也是合乎逻辑的.

c++ assert keyword

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

SGI slist和C++ 11 forward_list有什么区别?

除非我遗漏了某些内容,否则SGI slist和C++ 11 std::forward_list看起来都与我完全相同; 两者都实现了单链表.

我假设有一点不同,因为C++标准委员会没有采用名称slist而是选择了一个新名称forward_list,当他们将容器添加到C++ 0x的标准库中时.

containers list singly-linked-list c++11

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

使用可变参数模板函数的内置多维数组的大小

在C++ 11中,可以使用constexpr创建一个函数,该函数在编译时返回内置一维数组的大小(元素数).示例如下:

template <typename T, std::size_t N>
constexpr std::size_t size(T (&array)[N])
{
     return N;
}
Run Code Online (Sandbox Code Playgroud)

这是ARRAY_SIZE和类似宏imo的优秀替代品.

但是,这只会返回内置多维数组最重要维度的大小.

我使用以下函数来确定内置二维数组的大小:

template <typename T, std::size_t N, std::size_t N2>
constexpr std::size_t size(T (&array)[N][N2])
{
     return N * N2;
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,使用一个函数返回具有任意数量维度的内置数组的大小非常有用.我认为可变参数模板可能会有所帮助,但我无法看到解压缩模板参数的方法,因为只传递了一个参数.这样的功能可能吗?

提前致谢.

c++ built-in multidimensional-array variadic-templates c++11

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