gpt4 book ai didi

c++ - 如何将原始字符串文字传递给 [[deprecated(message)]] 属性?

转载 作者:太空狗 更新时间:2023-10-29 22:54:03 25 4
gpt4 key购买 nike

我想将原始字符串文字作为消息传递给 [[deprecated(message)]] 属性。该消息被一次又一次地使用。所以我想避免代码重复。

首先,我尝试使用静态 constexpr 变量。

static constexpr auto str = R"(
Use this_func()
Description: ...
Parameter: ...
)";

[[deprecated(str)]]
void test1() {
}

我收到错误消息“已弃用的消息不是字符串”。 [[deprecated(message)]] 似乎不接受静态 constexpr 变量。

我尝试将行字符串文字定义为预处理器宏。

#define STR R"(
Use this_func()
Description: ...
Parameter: ...
)"

[[deprecated(STR)]]
void test2() {
}

它在 clang++ 8.0.0 上按我预期的方式工作。

prog.cc:38:5: warning: 'test2' is deprecated: 
Use this_func()
Description: ...
Parameter: ...
[-Wdeprecated-declarations]
test2();
^

演示:https://wandbox.org/permlink/gN4iOrul8Y0F76TZ

但是g++ 9.2.0编译报错如下:

prog.cc:19:13: error: unterminated raw string
19 | #define STR R"(
| ^
prog.cc:23:2: warning: missing terminating " character
23 | )"
| ^

https://wandbox.org/permlink/e62pQ2Dq9vTuG6Or

#define STR R"(  \
Use this_func() \
Description: ... \
Parameter: ... \
)"

如果我在每行的尾部添加反斜杠,没有发生编译错误,但输出消息与我预期的不同,如下所示:

prog.cc:38:11: warning: 'void test2()' is deprecated:   \\nUse this_func()  \\nDescription: ... \\nParameter: ...   \\n [-Wdeprecated-declarations]

我不确定哪个编译器工作正常。

有没有办法将原始字符串文字变量/宏传递给 [[deprecated]] 属性?

最佳答案

没有“原始字符串文字变量”这样的东西。可能有一个指向字符串文字的变量,但它是一个变量,而不是文字本身。 deprecated 属性不接受计算为字符串的 C++ 常量表达式。它需要一个 string literal : 一个实际的 token 序列。

因此,您最多只能使用宏来包含您的字符串文字。当然,宏和原始字符串文字不能很好地结合在一起,因为原始字符串应该会占用整个文本。所以 \ 字符将充当宏 的延续,并且 是字符串的一部分。

关于c++ - 如何将原始字符串文字传递给 [[deprecated(message)]] 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667465/

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