c++ - 通过派生类模板参数指定基类模板参数之一。如何使用基类的 using 声明

标签 c++ templates

例如,我有下一段代码:

template<typename T, typename T2>
class a
{
public:
    using myfl_t = float;

    a(myfl_t fl, double db) {}

    virtual void f()
    {
        std::cout << "a::f()\n";
    }
};

template<typename T>
class b : public a<T, int>
{
    using base_t = a<T, int>;
    using myfl_t = typename base_t::myfl_t;
public:
    b(myfl_t fl, double db)
        : base_t(fl, db) {}

    void f() override
    {
        std::cout << "b::f()\n";
    }
};

看来我只能通过在派生类中复制 using 来重用基类的 myfl_t 声明。 有更简单的方法吗?

最佳答案

class a 中定义的

myflt_tclass b 中不可见,如下所述:https://eli.thegreenplace.net/2012/02/06/dependent-name-lookup-for-c-templates

你可以将 myflt_t 带入 class b 而无需显式重新声明:

using typename base_t::myfl_t

关于c++ - 通过派生类模板参数指定基类模板参数之一。如何使用基类的 using 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378513/

相关文章:

c++ - 如何正确使用标签调度来选择构造函数

c++ - 可以编写一个接受类型并返回不同类型的函数吗

三重嵌套模板参数的 C++ 正确语法

c++ - 函数参数评估的完美转发和顺序

c++ - Matlab绘图功能与Qt C++程序

c++ - 链接 vc6 dll/lib 时未解析的符号

c++ - boost fusion/MPL : convert type from sequence to sequence of equivalent any_range's

php - Smarty:取消设置模板中的数组索引

C++:为 vector 中的非连续索引赋值?

c++ - getValue 错误