如何从constexpr类对象中获取值
How to get value out of constexpr class object?
我有一个可以构造constexpr的类。我使用它确实在编译时更改了一些字符串文字。在这个精心设计的示例中,您可以看到constexpr
构造函数被调用,然后它将处理本地成员data_
。但是我怎样才能最终得到data_
呢?我的方法似乎不起作用:
(演示(
#include <cstdio>
#include <cstddef>
template <const char* S>
struct cxprstring
{
constexpr cxprstring() : data_{S} {
// ...
// (further processing of data_)
}
constexpr static const char value[] = cxprstring<S>{}.data_;
char data_[] = {};
};
template <const char* S>
constexpr const char format_view[] = cxprstring<S>::value;
constexpr const char a[] = "hello ";
int main()
{
printf("%sn", format_view<a>);
}
它会产生以下错误:
<source>:12:59: error: initializer fails to determine size of 'cxprstring<S>::value'
12 | constexpr static const char value[] = cxprstring<S>{}.data_;
| ~~~~~~~~~~~~~~~~^~~~~
<source>:18:53: error: initializer fails to determine size of 'format_view<S>'
18 | constexpr const char format_view[] = cxprstring<S>::value;
| ^~~~~
我怎样才能让它工作?
未大小的数组不能是类型的非静态数据成员。曾经
即使可以,它的大小无疑也必须由默认的成员初始值设定项来推导。在您的情况下是{}
,因此大小为0。这是不允许的。
即使大小可以由构造函数来推导。。。S
是指针。编译器不知道它指向多少个字符。因此无法获取它的大小。
这种做任何你想做的事情的方法都是不可行的。
相关文章:
- 我可以从列表中获取对象并复制它们,但如何删除我复制的对象?
- 从自定义类获取对象向量中的 max 元素
- 如何从函数中获取对象?
- 给定一个指向对象的超类指针,如何获取对象的大小?
- Cython正在获取C++对象列表的长度
- 只需调用对象即可获取对象数据
- 是否可以在C 中获取对象的随附文件的名称
- 使用PCL(点云库)获取对象信息的数组
- 从基类的shared_ptr中获取对象
- 如何在C++中使用编译时三元运算符来获取对象成员
- 如何从 nlohmann json 获取对象条目
- 通过参考从地图获取对象
- 一般获取对象的所有属性C++
- 如何在运行时获取对象的总大小
- C :通过索引从列表中获取对象无效
- C++ 获取对象的内存地址,而不是对象的值
- Qjson 获取对象名称
- 我们如何在提升属性树中获取对象
- 如何在具有给定索引的列表中获取对象
- 从QWidget获取对象名称(如Qt Designer中所示)