C++ 中预处理器方法的别名
Alias for preprocessor methods in C++
我正在编写一个将使用openmp
的库,但是我想让用户能够禁用/启用我的库openmp
预处理器定义(以防他们想使用openmp
但避免让我的库使用它(
最明显的解决方案是这样的
void foo() {
#ifndef disable
#pragma omp parallel for
#endif
for (int i = 0; i < 100; ++i) {
std::cout << i << " " << std::endl;
}
#ifndef disable
#pragma omp barrier
#endif
但是,我有许多利用openmp的方法。有什么方法可以为 openmp 创建别名吗?
即:
#if OpenMpSupported
#define AliasParallel = #pragma omp parallel for
#define AliasBarrier = #pramgma omp barrier
#else
#define AliasParallel = //some thing that doesn't matter
#define AliasBarrier = //some thing that that doesn't matter
#endif
void foo() {
#AliasParallel
for (int i = 0; i < 100; ++i) {
std::cout << i << " " << std::endl;
}
#AliasBarrier
简单地说,无论如何我都可以为此创建一个速记。
一般来说,没有办法做到这一点。不会重新扫描宏扩展的结果以获取#
指令。
但是,在#pragma
的特殊情况下,还有另一种选择(自C++11起(:
_Pragma("foo bar")
相当于
#pragma foo bar
前者可以由宏产生。
在您的情况下,这将是:
#if OpenMpSupported
#define AliasParallel _Pragma("omp parallel for")
#define AliasBarrier _Pragma("omp barrier")
#else
#define AliasParallel
#define AliasBarrier
#endif
void foo() {
AliasParallel
for (int i = 0; i < 100; ++i) {
std::cout << i << " " << std::endl;
}
AliasBarrier
(但是,我不知道这是否适用于openmp。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 有没有优雅的方法可以在多态 lambda 中编写类型别名
- 类方法和全局函数中的别名
- C++ 中预处理器方法的别名
- C :方法中的字符串成员别名
- 所有重载方法的别名
- 基类方法别名
- 如何为静态模板方法设置别名
- 重载以 typedef 别名作为参数的成员方法
- 模板类模板方法参数中的模板别名不起作用
- 别名方法和性能问题
- 创建变量名别名的方法
- C++-有没有一种方法可以为字段创建别名
- 为成员对象的方法添加别名的最佳方法? "Passthrough methods"
- 在C++中避免别名(例如,将容器的元素添加到自身时)的"right"方法是什么?
- 如何创建模板方法的别名