败犬日报 2025-05-18
1. 判断一个类型的特定成员函数的返回值类型,但是没法构造这个类型
具体地说,有个模板参数 A,要求 A 存在一个成员函数 Y operator()(X&)
,X 和 Y 都是具体类型。
可以用 declval:
cpp
std::is_same_v<Y, decltype(declval<A>()(declval<X&>()))>
C++20 可以更简单:
cpp
requires (A a, X x) {
{ a(x) } -> std::same_as<Y>;
}
2. parameter 和 argument 的区别
茴香豆问题。虽然定义上 parameter 是形参,argument 是实参,但是很多时候都混用(只有同时出现两者才需要区分)。
比如 https://eel.is/c++draft/func.wrap.func.general 里是这样的:
cpp
template<class R, class... ArgTypes>
function(R(*)(ArgTypes...)) -> function<R(ArgTypes...)>;
这里的 ArgTypes 很显然是形参类型。
https://docs.python.org/3/faq/programming.html#what-is-the-difference-between-arguments-and-parameters python 文档里看似区分了两者,但是它说 "kwargs are parameters":
foo, bar and kwargs are parameters of func.