我无法获取模板来推断函数参数的确切类型。
在这个例子中callit的调用不会推断出我想要的参数类型。callitA的第一次调用将推导出 [int, int, int, int]。callitB的第二次调用将推导出 [const int &, int &, const int &, int &]。只有当我对模板进行特定实例化时,我才能获得正确的参数。
如何在不明确指定模板参数的情况下获得下面 3 中的行为。它们应该可以从函数参数中推导出来。
提前致谢。
void read() {}
template< typename P, typename... Args >
void read(const P & p, Args&... args) {
// p is a constant and shall not be written to.
read(args...);
}
template< typename P, typename... Args >
void read(P & p, Args&... args) {
cin >> p;
read(args...);
}
template< typename... Args >
void callitA(Args... args) {
read( args... );
}
template< typename... Args >
void callitB(Args&... args) {
read(args...);
}
// b is the only variable that can be returned from funk.
void funk(const int & a, int & b, const int c, int d) {
callitA(a, b, c, d); // 1. Args will be [int, int, int, int]
callitB(a, b, c, d); // 2. Args will be [const int &, int &, const int &, int &]
// 3. Here Args will be what I want [const int &, int &, const int, int]
callitA<const int &, int &, const int, int>(a, b, c, d);
}
void main() {
const int a = 1;
int b = 0;
const int c = 3;
int d = 4;
funk(a, b, c, d);
cout << b << endl;
}