【发布时间】:2018-09-28 13:25:43
【问题描述】:
根据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);
}
【问题讨论】:
-
您可以为此创建一个特征。作为奖励,您的方法也适用于 lambda。
-
@NathanOliver 最佳答案说“[...] 你无法获得它的参数类型”,这并不是
argument_type的真正替代品;) -
@user463035818 你想让
F成为任何可调用类型还是仍然是std::function?我问是因为first_argument_type只存在于std::function。 lambda、函数和大多数仿函数都没有。而且,就像第一个答案所示,我认为这通常是不可能的,因为operator()可以重载。 -
所以
template <typename Ret, typename FirstArg> void call_with_user_input(std::function<Ret(FirstArg)> f):-) 因为奖金可以处理的不仅仅是前两个参数。