小编Roy*_*oyt的帖子

如果设置了模板参数类型或多重集,则在编译时检查,并且容器的元素类型是算术

我有一个名为'equal'的函数接受2个参数,每个参数应该是std :: set或std :: multiset,容器的元素类型应该是算术类型(int,float,double ...).如果不满足上述2个条件,我希望编译器报告错误.

我希望我的代码可以像这样运行:

int main(void)
{
    std::set<int> s1;
    std::set<int> s2;
    equal(s1, s2);    //  OK

    std::multiset<float> s3;
    std::multiset<float> s4;
    equal(s3, s4);    //  OK

    std::set<int> s5;
    std::multiset<int> s6;
    equal(s5, s6);    //  compile error

    std::set<int*> s7;
    std::set<int*> s8;
    equal(s7, s8);    //  compile error

    std::vector<int> s9;
    std::vector<int> s10;
    equal(s9, s10);    //  compile error

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在它可以检查元素是否是算术类型,如下所示:

template <class Container, class = typename std::enable_if<std::is_arithmetic<typename Container::value_type>::value>::type>
bool equal(const Container &container1, const Container &container2)
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

但是如何确保只设置容器或多个集合?

编译器可以支持C++ 11,例如vc2015或gcc4.8

c++ templates traits type-traits c++11

4
推荐指数
1
解决办法
422
查看次数

如果无法继承QSlider,如何在滑块上添加刻度线

我有一个Qt对话框,其中有一个滑块,当初始化对话框时,滑块将被设置一个值.为了提醒用户什么是默认值,我想在滑块上添加一个标记,只需在手柄上方画一条线或三角形.这里,滑块应该是QSlider类型,这意味着我无法实现从QSlider派生的自定义控件.有没有办法实现它?

qt qslider qt4.7

2
推荐指数
1
解决办法
4749
查看次数

标签 统计

c++ ×1

c++11 ×1

qslider ×1

qt ×1

qt4.7 ×1

templates ×1

traits ×1

type-traits ×1