c++ - 使用对 const 结构的 const 数组的引用进行构造

标签 c++ arrays struct constructor

所以我有一个结构数组和一个使用该数组的类。构造函数需要引用常量结构数组。我正在努力将结构数组作为引用传递,以便类构造函数可以使用它。由于结构数组没有改变,所以不需要复制它,我只需要引用它。这是我当前产生错误的代码。

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 );
当我编译时,我得到编译错误,提示没有匹配的候选人。
如何将数组传递给构造函数,以便类方法可以使用它。数组隐含地知道它的大小,因为它是一个常数。

最佳答案

您需要使用模板参数指定数组的大小:

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;
    }
};
请注意,您实际上并不需要 _length成员不再。
这是 demo .请注意,这仅适用于引入类模板参数推导的 c++17。

关于c++ - 使用对 const 结构的 const 数组的引用进行构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62825053/

相关文章:

c - C 中的 Scanf/Printf...这是怎么回事?

包含二维数组类型的 C 结构定义

C:难以理解这个基于文件/结构的指令

java - 在构造函数或字段声明中初始化列表

c++ fmod 为 fmod(0.6,0.2) 返回 0.2

c++ - 如何删除 Windows 进程名称前面的十六进制数字

c++ - 如何实例化C++成员字符串引用

python - 查找两个数组之间变化值的索引

c - 传递和返回结构体 C

c++ - 由于删除而崩溃(尝试处理异常...)