C++ 中预处理器方法的别名
Alias for preprocessor methods in C++
我正在编写一个将使用 openmp
的库,但是我想让用户能够 disable/enable 我的库 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 创建别名吗?
IE:
#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
简而言之,我可以为此创建一个 shorthand。
一般情况下是没有办法做到这一点的。 #
指令不重新扫描宏展开的结果。
但是,在 #pragma
的特殊情况下,还有一个替代方案 (since 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。)
我正在编写一个将使用 openmp
的库,但是我想让用户能够 disable/enable 我的库 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 创建别名吗?
IE:
#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
简而言之,我可以为此创建一个 shorthand。
一般情况下是没有办法做到这一点的。 #
指令不重新扫描宏展开的结果。
但是,在 #pragma
的特殊情况下,还有一个替代方案 (since 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。)