gpt4 book ai didi

c++ - const 值作为模板参数

转载 作者:行者123 更新时间:2023-11-27 22:45:27 24 4
gpt4 key购买 nike

我刚遇到 gcc 和 clang 的编译错误,所以我认为这段代码是不可能的:

template < typename T >
struct Type {

using type = T;
};

template < int size = 1024 >
struct Foo {};

constexpr auto test_ = [] (const int size) {

return Type<Foo<size>>;
};

编译错误:

test.cpp:12:19: error: non-type template argument is not a constant expression
return Type<Foo<size>>;
^
1 error generated.

问题是为什么? size 是一个 const 值,应该能够适合作为模板参数,不是吗?我已经使用了一些静态常量值作为模板参数,但似乎不支持这种情况。

最佳答案

size is a const value and should be able to fit as a template parameter no?

不,const值不一定在编译时已知(即它们不是常量表达式)

你要的是 std::integral_constant :

constexpr auto test_ = [] (auto size) 
{
return Type<Foo<size>>{};
};

test_(std::integral_constant<int, 100>{});

作为Rakete1111在评论中提到,行 return Type<Foo<size>>;也是病式的——你可能想像我上面那样实例化它。

关于c++ - const 值作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43659475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com