Ism*_*run 1 c++ arrays constructor struct
所以我有一个结构数组和一个使用该数组的类。构造函数需要引用作为常量的结构数组。我正在努力将结构数组作为引用传递,以便类构造函数可以使用它。由于结构数组不会改变,因此无需复制它,我只需要引用它。这是我当前生成错误的代码。
struct c_cs_pair_t
{
const wchar_t c;
const wchar_t* cs;
};
class Converter
{
protected:
size_t _length;
const c_cs_pair_t(& _pairs)[];
public:
Converter ( const c_cs_pair_t(& pairs)[] ) : _pairs(pairs) {
_length = sizeof ( pairs ) / sizeof( c_cs_pair_t );
}
};
const c_cs_pair_t c2cspairs[] =
{ { L'\n', L"\\n" }
, { L'\0', L"\\0" }
, { L'\\', L"\\\\" }
, { L'[', L"\\[" }
, { L']', L"\\]" }
, { L'.', L"\\." }
, { L':', L"\\:" }
, { L'\u0008', L"\\b" }
, { L'\u000c', L"\\f" }
, { L'\u000a', L"\\n" }
, { L'\u000d', L"\\r" }
, { L'\u0009', L"\\t" }
, { L'\u000b', L"\\v" }
, { L'\u0000', L"\\0" }
};
const Converter converter ( c2cspairs );
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到编译错误,抱怨没有匹配的候选人。
如何将数组传递给构造函数以便类方法可以使用它。数组隐式地知道它的大小,因为它是一个常量。
您需要使用模板参数指定数组的大小:
template<size_t N>
class Converter
{
protected:
size_t _length;
const c_cs_pair_t(& _pairs)[N];
public:
Converter ( const c_cs_pair_t(& pairs)[N] ) : _pairs(pairs) {
_length = N;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,您_length不再需要该成员了。
这是一个演示。请注意,这仅适用于引入类模板参数推导的 c++17。