gpt4 book ai didi

c++ - 使用类名称进行条件宏扩展

转载 作者:行者123 更新时间:2023-12-02 09:50:22 26 4
gpt4 key购买 nike

我有一个函数 A ,其代码会根据输入是struct B 还是struct C 而改变。我不想两次写,所以我将差异封装在结构的()运算符中。

我的问题是 处理大量数据,并且()运算符被广泛调用。我想用宏替换该部分,以提高代码的性能。像这样:

#define B_TASK(data) //macro for B's task
#define C_TASK(data) //macro for C's task

struct B();
struct C();

template<class struct_t>
function A(struct_t data){
//some irrelevant code
.
.
while(..){ //extensive loop
#if data == B //my original code uses data()
B_TASK(data)
#else
C_TASK(data)
#endif
}
}

int main(){
B b_inst;
C c_inst;

A<B>(b_inst);
A<C>(c_inst);
}

可以做这样的事情吗?我不知道如何在预处理器 #if中要求结构名称。

最佳答案

如果C++ 17的constexpr if std::is_same 类型特征是可能的。看起来像

template<class struct_t>
function A(struct_t data){
//some irrelevant code
while(...){ //extensive loop
if constexpr(std::is_same_v<struct_t, B>)
B_TASK(data)
if constexpr(std::is_same_v<struct_t, C>)
C_TASK(data)
}
}

关于c++ - 使用类名称进行条件宏扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com