std::forward 变长模板


struct Position {
  Position(float x = 0.0f, float y = 0.0f) : x(x), y(y) {}

  bool operator==(const Position &other) const {
    return x == other.x && y == other.y;
  }

  float x, y;
};

struct Dir
{
    int x, y, z, w;
    Dir(int xx, int yy, int zz, int ww) : x(xx), y(yy), z(zz), w(ww)
    {}
};

template<typename C, typename ...Args>
C* my_assign(const string& str, int i, Args&& ...args)
{
    std::cout << str << "   " << i << "\n\n";
    C* ptr = new C(std::forward<Args>(args)...);
    return  ptr;
}

void ff()
{
    int x = 12, y = 23;
    Position* pos = my_assign<Position>("pos", 111111, x, y);
    assert(pos->x == 12 && pos->y == 23);

    Dir* dir = my_assign<Dir>("dir", 111111, 11, 22, 33, 44);
    assert(dir->x == 11 && dir->y == 22 && dir->z == 33 && dir->w == 44);
}


ostream &operator<<(ostream &out, const Position &position) {
  out << "Position(" << position.x << ", " << position.y << ")";
  return out;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容