【发布时间】:2021-07-21 08:59:14
【问题描述】:
我刚刚打开了一个问题about this,但不幸的是,正如@super 在他的回答中指出的那样,在函数getArray 中定义arr static 不是我想要的。我想要一个非静态非常量变量模板之类的东西,但到目前为止,c++ 还不支持它。是否有一些解决方法,它与非静态非常量变量模板具有相同的效果。
编辑
如果支持,这将是我期望的语法:
#include <array>
template<typename T_, size_t size_>
struct arg
{
using T = T_;
static constexpr size_t size = size_;
};
template<typename... Arugments>
struct Foo
{
template<typename Argument>
std::array<typename Argument::T, Argument::size> arr;
template<typename Argument>
std::array<typename Argument::T, Argument::size>& getArray() // specializations of all args in Arguments should be generated
{
return arr<Argument>;
}
};
int main()
{
Foo<arg<int, 10>> myFoo;
myFoo.getArray<arg<int, 10>>()[0] = 1;
Foo<arg<int, 10>> myFoo2;
myFoo2.getArray<arg<int, 10>>()[0] = 2; // should not affect the arr of myFoo
}
【问题讨论】:
-
返回引用是否有特殊原因?您打算如何处理返回类型?
-
您能否展示您希望代码的外观? (即使它实际上没有编译,因为不支持非静态非常量变量模板)
-
@2b-t 我不得不承认这个例子有点糟糕,我可能过度简化了问题,但我有一个需要静态大小列表的类,而不是
arg我使用typenames 创建一个在编译时评估的映射,因为这个“映射”的许多成员具有不同的类型。要回答您的问题,没有特殊原因需要返回参考。 -
@GianLaager 如果
Arguments内部有重复,会发生什么情况,这意味着两次完全相同的模板?它会发生还是不会发生?
标签: c++ c++11 templates variables