根据cppreference.com,以下三个成员类型:
那么这些成员类型的标准库替代品是什么呢?我是指我可以编写自己的类型特征,但我怀疑没有合适的替代品会被移除。作为一个例子:
argument_type
、first_argument_type
和second_argument_type
在C++17中被弃用,在C++20中被移除。那么这些成员类型的标准库替代品是什么呢?我是指我可以编写自己的类型特征,但我怀疑没有合适的替代品会被移除。作为一个例子:
template <typename F>
void call_with_user_input(F f) {
typename F::first_argument_type x; // what to use instead ??
std::cin >> x;
f(x);
}
argument_type
的替代品 ;) - 463035818_is_not_a_numberF
成为任何可调用类型还是仍然是std::function
?我问这个问题是因为first_argument_type
只存在于std::function
中。Lambda表达式、函数和大多数函数对象都没有它。而且,正如第一个答案所示,我认为这在通用情况下是不可能的,因为operator()
可以被重载。 - NathanOliverstd::function
,如果不清楚,很抱歉,我不想让示例过于复杂。 - 463035818_is_not_a_numbertemplate <typename Ret, typename FirstArg> void call_with_user_input(std::function<Ret(FirstArg)> f)
:-) 作为奖励,它可以处理不止前两个参数。 - Jarod42