根据cppreference.com所有follwing三个: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);
}
Run Code Online (Sandbox Code Playgroud) 有功能定义:
void f(int) { }
Run Code Online (Sandbox Code Playgroud)
我想定义:
int a;
Run Code Online (Sandbox Code Playgroud)
但如果函数定义更改为:
void f(double) { }
Run Code Online (Sandbox Code Playgroud)
变量定义必须变为:
double a;
Run Code Online (Sandbox Code Playgroud)
也就是说,"a"的类型必须与"f"函数的第一个参数相同.我需要以下内容:
decltype_of_argument<f, 0> a;
Run Code Online (Sandbox Code Playgroud)
在C++中有可能吗?