gpt4 book ai didi

templates - 模板化类中的构造函数继承 (C++11)

转载 作者:行者123 更新时间:2023-12-01 05:18:03 25 4
gpt4 key购买 nike

我有以下类定义:

template<typename T>
class Point {
private:
T px, py;
public:
Point(T x, T y): px(x), py(y) {
std::cout << "created " << x << ":" << y <<std::endl;
};
T x() const { return px; };
T y() const { return py; };
};

我从中获得特化,例如
class PointScreen: public Point<int> {
using Point::Point;
};

当我在 clang++ 中编译它时,我没有收到警告/错误,但没有调用构造函数:
#include <iostream>
// definitions from above
int main() {
std::cout << PointScreen(100, 100).x() << std::endl;
return 0;
}

这将返回一个随机值(也不是调试输出“创建...”)。例如返回的值 x()显然是“未定义”。

我刚刚在 g++ 中尝试了相同的方法 here ,在那里我得到了预期的结果。这是 clang++的问题吗?或者我的代码中有错误?

我的 clang 版本:Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final)(基于 LLVM 3.0)。我用 -std=c++11 -Wall 编译.

最佳答案

正如评论中所指出的,您需要一个支持继承构造函数的编译器。来自 Apache C++11 overview可以看到这个特性只适用于 gcc >= 4.8 和 Clang >= 3.3。

对于较旧的编译器,您必须手动定义所有构造函数,通过 calling the base constructors .另见 this Q&A有关变通方法的更多详细信息。

关于templates - 模板化类中的构造函数继承 (C++11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com