小编hel*_*vio的帖子

具有已删除方法的C++类是否可以轻松复制?

我希望B类继承除A类的几个方法之外的所有方法(假设它们都是可复制的),并且仍然可以轻易地复制.在C++ 11中,我可以删除方法.举个例子:

class A { // trivially copyable
   // private stuff here
public:
   A& operator += (const A&);
   // other public stuff here
};

class B: public A {
public:
   B& operator += (const A&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

B是否可以复制?我知道有关删除特殊方法的问题,但复合赋值不是一种特殊的方法(对吧?).

c++ language-lawyer c++11

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

函数调用运算符的继承和重载

我在尝试从父结构继承函数调用操作符时遇到问题.我创建了一个简单的代码来说明我的问题:

#include <iostream>
using namespace std;

template <class T, int N>
struct array
{
    T value[N];
    T& operator() (int);
};

template <class T, int N>
T& array<T,N>::operator() (int i)
{ return value[i]; }

template <class T, int N>
struct matrix: public array<T,N*N>
{
    T& operator() (int,int);
};

template <class T, int N>
T& matrix<T,N>::operator() (int i, int j)
{ return this->value[i*N+j]; }

int main()
{
    matrix<double,100> a;
    a(0) = 3.5;
    cout << a(0) << endl;
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

我希望'matrix'类从'array'类继承operator(),并用本地operator()重载它; 我希望这是因为参数的数量不同.但是,这段代码的编译失败了,例如"错误:不匹配调用'(矩阵)(int)'"和"注意:候选人需要2个参数,1提供".如果未在类'matrix'中定义operator(),则继承正常发生,并且代码编译并运行正常,如预期的那样. …

c++ inheritance operator-overloading

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

解决在C++中调用具有相同名称的函数的方法中的冲突

考虑以下用于方形矩阵的(模板化)C++结构的精简示例(不需要模拟问题发生):

#include <array>
#include <complex>
using namespace std;

double conj (double &x) { return x; };

template <typename T, int N>
struct matrix: array<T,N*N> {
    void conj() {
        for (int ij=0; ij<100; ++ij) {
            T z = (*this)[ij];
            (*this)[ij] = conj(z);
        }
    }
};

int main() {
    matrix<double,10> a;
    a.conj();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想实现一个执行矩阵复共轭的方法,使用名称.conj()与<complex>库中使用的命名系统一致.但是,我收到以下错误:

$ g++ example.cpp -std=c++11
example.cpp: In instantiation of ‘void matrix<T, N>::conj() [with T = double; int N = 10]’:
example.cpp:19:12:   required from here
example.cpp:12:26: error: no …
Run Code Online (Sandbox Code Playgroud)

c++ name-conflict

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

什么是_Tp和_Up?

检查STL库的源代码,我遇到了指定模板变量的宏_Tp和_Up.他们在哪里定义,两者有什么区别?为什么要使用这样的宏?我找不到有关此编程策略的任何信息.

编辑:我指的是GCC STL库,特别是复杂类,它是一个模板类,内容如下:

00115   template<typename _Tp>
00116     class complex
00117     {
00118     public:
00120       typedef _Tp value_type;
00121       
00124       complex(const _Tp& = _Tp(), const _Tp & = _Tp());
00125 
00126       // Lets the compiler synthesize the copy constructor   
00127       // complex (const complex<_Tp>&);
00129       template<typename _Up>
00130         complex(const complex<_Up>&);
00776   };
Run Code Online (Sandbox Code Playgroud)

我正在尝试理解复制构造函数及其注释的含义,并决定这是否是一个简单的可复制类.

c++ macros templates stl

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