几天前,我问自己在C函数中应该使用哪种数据结构.我通常用C++编写,选择将落到std :: vector.
有一些可能的选择:
最后一个选项似乎不寻常.有没有更大的项目,有人使用自己的结构,如列表?数组或自己的数据结构之间的决策是否有一般规则?
当我需要一个树形结构时,我不会想到只写一棵树.有没有广泛使用的具有这种结构的库(比如boost for C++)?或者这被认为是不好的风格,因为你必须存储一个void*而不是实际的类型?
非常感谢您的体验!
我希望将每个元素乘以mpl::vector一个int.首先,一元函数乘以一个int_与int.
template <int i>
struct multiply_scalar
{
template<typename T> struct apply
{
typedef int_<(T::value * i)> type;
};
};
Run Code Online (Sandbox Code Playgroud)
这是我想要的电话.
typedef vector<int_<3>, int_<4> > my_vec;
typedef typename transform< my_vec, multiply_scalar<2> >::type my_vec_2;
typedef vector<int_<6>, int_<8> > my_vec_3;
BOOST_MPL_ASSERT(( boost::is_same< my_vec_2, my_vec_3 > )); //Fails
//type of my_vec2 is: boost::mpl::v_item<mpl_::int_<8>, boost::mpl::v_item<mpl_::int_<6>, boost::mpl::vector0<mpl_::na>, 0>, 0>
Run Code Online (Sandbox Code Playgroud)
为什么结果向量不是简单的vector<int_<6>, int_<8>>?我拿错了吗?可能是元函数或变换没有以正确的方式应用.
我最近测试了用clang而不是gcc构建代码。它失败,因为由于模板函数中未使用的参数,我使用-Werror。使用gcc不会发生这种情况。
这是一个小例子:
template <typename REAL> int f(int a){return 42;}
int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)
用clang编译得到我想要的结果:
$clang -c UnusedParam.cpp -Wunused-parameter
>UnusedParam.cpp:1:36: warning: unused parameter 'a' [-Wunused-parameter]
> template <typename REAL> int f(int a){return 42;}
> ^
>UnusedParam.cpp:3:11: warning: unused parameter 'a' [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)
Gcc只会报告第二个函数中未使用的参数。
$gcc -c UnusedParam.cpp -Wunused-parameter
>UnusedParam.cpp:3:5: warning: unused parameter ‘a’ [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)
有没有办法执行类似的行为?我也希望gcc生成未使用的参数警告。
编译器: