C++ 模板化方法中的运算符重载

C++ 模板化方法中的运算符重载,c++,operator-overloading,C++,Operator Overloading,我有一门课(去掉了不相关的细节): 致: 但我的重载从未生效。我认为过载应该接近: 或者可能: template <typename T, std::size_t idx> const T& operator[](std::size_t _idx) const { std::cout << "yay, overloading " << idx << std::endl; return

我有一门课(去掉了不相关的细节):

致:

但我的重载从未生效。我认为过载应该接近:

或者可能:

    template <typename T, std::size_t idx>
    const T& operator[](std::size_t _idx) const
    {
        std::cout << "yay, overloading " << idx << std::endl;
        return idx * 1.0;
        // return std::get<idx>(parameters);
    }
模板
常量和运算符[](标准::大小\u T\u idx)常量
{

std::cout不可能在索引上专门化模板化的
运算符[]
,因为索引是一个运行时属性

因此,
std::tuple
有一个
get()
成员函数,而不是
操作符[]
(参见此)

此外,无法从赋值推断函数(或运算符)返回类型

因此,可以推断出
模板操作符[]中的
T
idx
,不幸的是,这将它排除在可行的重载候选集之外

    auto val1 = parameterPack->getValue<float, 1>();
    auto test2 = parameterPack[1];
    template <typename T, std::size_t idx>
    const T& operator[](std::size_t _idx) const
    {
        std::cout << "yay, overloading " << idx << std::endl;
        return idx * 1.0;
        // return std::get<idx>(parameters);
    }