有功能定义:
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++中有可能吗?
注意:此问题中提供的示例不是生产代码,根本没有任何意义.它只是在那里说明我的问题.
我正在测试它的可能性decltype,特别是如果它用于推断函数参数类型,并遇到了一个问题:
假设有两个类结构如下:
struct ClassInt
{
// Note: no default ctor
ClassInt(int value)
: m_Value(value)
{}
int m_Value;
};
struct ClassDouble
{
// Note: no default ctor
ClassDouble(double value)
: m_Value(value)
{}
double m_Value;
};
Run Code Online (Sandbox Code Playgroud)
现在,我写了一个函数(以某种方式)通过字符串检索一个type参数的实例(应该是上面的一个),并为其m_Value成员分配一个给定的值:
template< typename Ty >
Ty* get_fake_ptr() { return nullptr; }
// Retrieve pointer to Ty object by name and assign its value member.
// The problem is that we don't actually have an instance of Ty at the point
// …Run Code Online (Sandbox Code Playgroud)