【发布时间】:2012-10-16 07:05:32
【问题描述】:
void f1(int (&)[8])
{}
void f2(int (&)[])
{}
int main()
{
int a[8];
f1(a); // OK
f2(/* What should I put here? */); // ???
return 0;
}
如何调用 f2?
PS: void f2(int (&)[]) {} 在 VC++ 2012 下是合法的。
考虑以下几点:
template<class T>
struct A
{};
template<class T>
struct A<T[]>
{};
template<class T, size_t size>
struct A<T[size]>
{};
【问题讨论】:
-
如果尺寸未知,我不知道为什么你根本不指定
void f2(int a[])。 -
我的意图是在重载现有函数的同时使用任意大小的数组调用 f2。例如诠释 b[7]; f2(b);
-
@xmllmx 那么
template <size_t N> void f(int (&)[N]) { }呢? -
@hvd,您的解决方案与 f1 相同。
-
@xmllmx 当非模板重载提供完全匹配时,不会选择模板函数。你可以有一个同名的非模板和一个模板重载,不会有任何歧义。
标签: c++ arrays overloading