【发布时间】:2022-01-24 17:57:11
【问题描述】:
是否可以在 C++ 中创建像 @ 这样的自定义注解或像 Rust 的 [#...] 这样的其他字符?
目标类似于:
#pragma once
#include "my_header.h"
@RestController(path = "/home")
void MyClass::some_method(int int_arg)
{
// some C++ code
}
我已经在阅读与此类似的旧问题,但从现在起应该是 7 岁或更多。
现在有办法实现这一点吗?
问候
【问题讨论】:
-
en.cppreference.com/w/cpp/language/attributes。不过,这取决于您要从中寻找什么。
-
不@chris,不可能创建自定义的,这是主题的重点```编译器会忽略它无法识别的任何属性,这意味着您无法定义您的使用此语法的自定义属性 ``` docs.microsoft.com/en-us/cpp/cpp/attributes?view=msvc-170
-
编译器会忽略它们,但工具可以免费使用它们。该语言(当前)没有为您提供一种以编程方式与属性交互的方法,因此编译器是否忽略它们是无关紧要的。这就是为什么它取决于,例如,预编译步骤是否足够好,或者您是否专门寻找可以生成代码或执行其他任务的东西作为编译本身的一部分。
-
你是绝对正确的@chris 我正在尝试设计一个 Spring 风格的 Web 框架(仅用于学习目的)。将注释的内容提供给另一个内部类的想法是。我已经看到了另一个采用这种风格的精彩 C++ 项目,但我想将其规划为一个 DI 容器,您可以在其中“注册”您的类并使其对最终用户可用,并提供多个 API。您能否进一步解释是否可以选择检索路径的
[[my::RestController(path = "/home")]]属性的值?还是在 C++20 中也没有办法? -
我认为宏是更直接翻译此类内容的最常见解决方案。我建议研究一下现有的各种 DI、服务器端 REST 等库,以了解人们采取的所有路径。
标签: java c++ rest annotations web-frameworks