小编Dan*_*iel的帖子

在C++中从派生类构造函数中访问基本模板类中的变量

让我们看看这个简单的代码示例,包括一个基类和一个派生自Base的类,它需要在其构造函数中使用基类成员的地址.

#include <vector>
#include <inttypes.h>
#include <stdio.h>

class Base
{
protected:
  std::vector<uint32_t> arr;
public:
  Base(std::vector<uint32_t> arr_in): arr(arr_in) {}
};

class Derived: public Base
{
private:
  uint32_t *parr;
public:
  Derived(std::vector<uint32_t> arr_in): Base(arr_in)
  {
    parr = &arr[0];
  }

  uint32_t *get_parr();
};

uint32_t *Derived::get_parr(void)
{
  return parr;
}

int main()
{
  std::vector<uint32_t> myarr(3, 1);
  Derived myderived(myarr);
  printf("myderived.myarr adress = %p", myderived.get_parr());
}
Run Code Online (Sandbox Code Playgroud)

由于派生类的构造函数首先调用基类构造函数,然后才执行其代码块,因此可以访问基类的成员.所以一切正常.

现在我更改代码示例,以便我的两个类是模板.

#include <vector>
#include <inttypes.h>
#include <stdio.h>

template<typename T>
class Base
{
protected:
  std::vector<T> arr;
public:
  Base(std::vector<T> arr_in): arr(arr_in) {} …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates constructor class

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

标签 统计

c++ ×1

class ×1

constructor ×1

inheritance ×1

templates ×1