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;
}
std::forward 变长模板
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 右值引用、std::move 和 std::forward 是 C++11 中的最重大语言新特性之一。就算我们不主...
- 模板实参推断和引用 从左值引用函数参数推断类型 如果这里函数参数的类型是const T&,正常的绑定规则告诉我们可...
- C++11中std::move、std::forward、左右值引用、移动构造函数的测试 关于C++11新特性之s...
- C++11 std::move 和 std::forward 用法: 当知道类型时, 用 std::move得到一...
- 下文先从C++11引入的几个规则,如引用折叠、右值引用的特殊类型推断规则、static_cast的扩展功能说起,然...