gpt4 book ai didi

c++ - 可以使用 C++ 模板来推迟对其参数的评估吗?

转载 作者:行者123 更新时间:2023-11-27 22:36:39 27 4
gpt4 key购买 nike

我正在开发一个代码库,该代码库具有一个行为本质上如下所示的宏:

struct to_void {
template<class T>
inline void operator&&(T&& t) {}
};

#define cout_if(c) (!(c)) ? ((void)0) : to_void() && std::cout

// --

extern int expensive_op(int c);
void foo(int a, int b) {
cout_if(a < b) << expensive_op(a + b);
}

是否可以创建一个保留cout_if 语法的模板,同时防止对a + bexpensive_op 求值,如果它们不需要吗?我可以看到这种东西在其他环境中很有用(例如,在嵌入式 DSL 中),但宏似乎很脆弱。

最佳答案

如果不更改语法或修改 expensive_op,我认为您的要求是不可能的。基本问题是,无论您做什么,在调用重载运算符时,操作数都已经求值,因为它们必须作为参数传递给运算符函数。我不认为有一种方法可以通过在函数的实现内部做一些事情来避免对函数调用的参数求值。因此,不可能有办法实现您的要求……

关于c++ - 可以使用 C++ 模板来推迟对其参数的评估吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53291936/

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