宏通常用于文本替换。就我而言,我需要有条件地清除一些关键字,以便在没有特定功能的编译器中进行编译。
具体来说,我一直在研究这个片段来自的cpp11 范围
template <typename C>
struct has_size {
template <typename T>
static constexpr auto check(T*) -> // problem in VS2013
typename std::is_integral<
decltype(std::declval<T const>().size())>::type;
// .. some more stuff
};
Run Code Online (Sandbox Code Playgroud)
我提供这个作为产生问题的例子。在上面的代码中,我最终做了
template <typename T>
static
#if COMPILE_WITH_GCC_NEW_ENOUGH
constexpr
#endif
auto check(T*) ->
Run Code Online (Sandbox Code Playgroud)
因为还有其他部分constexpr需要替换const才能编译。
我要问的是一种说法,例如
#define Constexpr ?????????
Run Code Online (Sandbox Code Playgroud)
这样它就会constexpr在 gcc 编译中被替换,而在 VS 编译中没有文本内容。
当然,简单地说:
#define constexpr
Run Code Online (Sandbox Code Playgroud)
将扩大constexpr到一无所有。您可以将此宏定义包装在适合#if您的不支持此功能的编译器中。
有时人们使“空”扩展更加明确:
#define constexpr /* nothing */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1607 次 |
| 最近记录: |