【发布时间】:2016-03-22 16:16:32
【问题描述】:
我对 Boost MPL(以及一般的元编程)相当陌生,我认为我对模板与类型的概念感到困惑。我正在使用的一个简单示例是尝试计算向量的长度。以下编译正常:
typedef mpl::vector_c< int, 0, 1, 2, 3, 4, 5, 6, 7 > myVector;
struct TestSize
{
template <typename mySequence> struct apply
{
typedef mpl::size<mySequence> type;
};
};
typedef TestSize::apply<myVector>::type result;
但如果我在大小计算的结果中添加“::type”,如下所示:
struct TestSize
{
template <typename mySequence> struct apply
{
typedef mpl::size<mySequence>::type type;
};
};
typedef TestSize::apply<myVector>::type result;
然后我收到错误“错误:非类型“boost::mpl::size::type [with Sequence=mySequence]”不是类型名称”。
这是因为模板参数在嵌套命名空间中而没有推导出来的情况吗?更令我困惑的是以下编译:
struct TestSize
{
template <typename mySequence> struct apply
{
typedef mpl::size<mySequence> type;
typedef mpl::range_c<int, 0, type::type::value> myRange;
};
};
typedef TestSize::apply<myVector>::type result;
typedef TestSize::apply<textureIndices>::myRange range;
为什么我可以在那里做“type::type::value”,但不能在前一行做“size
【问题讨论】: