Skip to content

败犬日报 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.