小编LxL*_*LxL的帖子

如何在operator + =中调用operator +

以这种方式定义operator + =是对的吗?

void operator +=(const BigNumber& other)
{
    *this=(*this) + other;
}
Run Code Online (Sandbox Code Playgroud)

在这样的类:

class BigNumber
{
public:
   //....
    BigNumber operator +(const BigNumber& other)
    {
        return sum(other);
    }

  //....
}
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading

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

有没有办法在类指针类型的指针中调用类操作符而不使用*?

当我有一个指向类的指针时,是否可以在不使用*的情况下调用operator []?

   class MyClass
    {
    public:
        void operator[](int n)
        {
            cout<<"In []";
        }
    };
    int main()
    {
        MyClass *a=new MyClass;
        (*a)[2];//work
        a[2];//It just do some pointer arithmetic ...too bad :((
    }
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading

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

哪一个使用擦除或在向量中调整大小更快?

在下面的代码中哪一个更有效调用resize或erase?

vector<int> a(5000);
//....
vector<int>::iterator it = remove(a.begin(),a.end(),8)

a.resize( std::distance(a.begin(),it));
//or 
a.erase(it,a.end());
Run Code Online (Sandbox Code Playgroud)

我认为这取决于重复元素的数量对吗?

c++ optimization resize vector erase

3
推荐指数
2
解决办法
1693
查看次数

标准6.8节中的这个例子如何工作?

在标准的章节§6.8(N3690草案)中,我看到了这段奇怪的代码:

struct T2 { T2(int){ } };
int a, (*(*b)(T2))(int), c, d;
Run Code Online (Sandbox Code Playgroud)

什么是 int(*(*b)(T2))(int)?!

b指向T2构造函数的指针吗?或者是指向函数指针的指针?

波纹管代码也编译得很好奇怪!:

struct T2 { T2(int){ } };
int((*b)(T2));
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers function

3
推荐指数
1
解决办法
104
查看次数

专门化模板类构造函数

我想专门化一个模板类构造函数:

如果type为int,则默认值为50-50.如果它的浮动默认值应为0.5-0.5.

我的代码是:

#include <iostream>
#include <limits>
#include <type_traits>

template<typename T>
class Foo{
public:
    template<typename = typename std::enable_if<
        std::is_integral<T>::value&& !std::is_floating_point<T>::value>::type>
        Foo(T value1 = 50, T value2 = -50) :value1_(value1), value2_(value2){}

    template<typename = typename std::enable_if<
        std::is_floating_point<T>::value>::type>
        Foo(T value1 = 0.5, T value2 = -0.5, void* dummy = 0) : value1_(value1), value2_(value2){}
    T value1_, value2_;
};

int main()
{
    Foo<float> test;
    std::cout << test.value1_ << " " << test.value2_ << '\n';

    Foo<int> …
Run Code Online (Sandbox Code Playgroud)

c++ templates class sfinae c++11

3
推荐指数
1
解决办法
278
查看次数

从 QGraphicsItem 获取 QGraphicsView 的大小

:我怎样才能 从我自己的子类中得到graphicsview width和?heightgraphicsItemQGraphicsItem

c++ size qt qgraphicsview qgraphicsitem

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

检查template参数是否等于另一个模板参数的Base类

我有一个这样的课:

template <class T1, class T2>
class A
{
    //Error if Base class of T2 is not T1 (At compile time)
};
Run Code Online (Sandbox Code Playgroud)

我想检查一下是否T1是Base类T2.可以在编译时吗?

一些例子 :

class C{};
class B :public C{};

A< C, B > a;     //Ok because C is base class of B
A<B, C> b;       //Error B is not base class of C
A<char, char> c; //Error char is not base class of char 
//.....
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

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

使用成员变量的偏移量访问结构体的私有成员

我正在阅读有关结构和结构填充的内容,并编写了这段代码。它使用结构体的地址偏移量来编辑结构体的私有成员。这是否意味着您可以参加某人制作的课程并提取/更改私有变量和函数?

#include <iostream>
typedef struct x {
    int a; 
private:
    int b;
public:
//Init
    x(int a, int b) : a(a) , b(b){}

    void print(){
        //Print values
        std::cout << a << " " << b << std::endl;
    }
} x;

int main()
{
    struct x s(10,20) ;
    int *p = (int *)(((char*)&s)+4); //4 Byte offset from a (a is at base)
    s.print();
    (*p) +=1;
    s.print();

    //Stops terminal closing
    int junk;
    std::cin >> junk;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ struct

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

QListWidget很长的文本

我问这个问题是因为我不知道如何用谷歌搜索,我找不到正确的关键字。

我有一个QListWidget,里面有字符串。字符串非常长,如果我禁用水平滚动(这正是我想要的),则文本以 ... 结尾,因为它太长了。

我想让文本显示文本的结尾和开头,例如:

This is very long text改为This is ... 文本而不是This is very long ...

有没有简单的方法可以实现这一点而无需操作字符串?之后我需要完整的字符串,并且我不想存储额外的数据。任何帮助表示赞赏。

c++ qt qlistwidget

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

如何为const和非const容器专门化模板?

我正在尝试对模板进行2次特化:

  • 一个接受非const容器的人
  • 另一个接受const容器的人

我目前的代码是:

template<class T>
struct A{
    constexpr static int value=0;
};

template<template<typename>class T,typename...Args>
struct A<T<Args...>>{//accept non const containers
    constexpr static int value=1;
};

template<template<typename>class T,typename...Args>
struct A<T<Args...> const>{//accept const containers
    constexpr static int value=2;
};
Run Code Online (Sandbox Code Playgroud)

ideone

但是这个代码不起作用,如果我使用const容器,它使用第一个A实例而不是第三个实例.

using Type=const std::array<int,10>;
std::cout<<A<Type>::value;//output is 0
Run Code Online (Sandbox Code Playgroud)

我试过删除

template<class T>
struct A{
    constexpr static int value=0;
};
Run Code Online (Sandbox Code Playgroud)

但它给了很多错误 ..

我该怎么办 ?

c++ templates const variadic-templates c++11

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