将带有变量args(...)的宏转换为constexpr。

问题描述 投票:0回答:1

如何将这个宏转换成cpp风格的constexpr?

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "TAG", __VA_ARGS__)

类似这样。

constexpr auto LOGD(...){
    __android_log_print(ANDROID_LOG_DEBUG, "TAG", __VA_ARGS__);
}

很明显,第二个不能编译,我想我必须改变语法,但我不知道如何改变。

c++ android-ndk c++17 constexpr
1个回答
4
投票

类似这样的东西。

template<class... Args>
auto LOGD(const Args&... args) {
    return __android_log_print(ANDROID_LOG_DEBUG, "TAG", args...);
}

但为什么要这样做呢?constexpr 是不清楚的。__android_log_print 本身不是 constexpr.


1
投票

根据Evg的回答,你也可以写。

template<class... Args>
auto LOGD(Args&&... args) {
    return __android_log_print(ANDROID_LOG_DEBUG, "TAG", std::forward<Args>(args)...);
}

这支持完美转发。

© www.soinside.com 2019 - 2024. All rights reserved.