请考虑下面的简单示例:
#include <iostream>
template <typename T>
class Base
{
public:
static constexpr int y = T::x;
};
class Derived : public Base<Derived>
{
public:
static constexpr int x = 5;
};
int main()
{
std::cout << Derived::y << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在g ++中,这可以很好地编译5并按预期打印.但是,在Clang中,它无法编译错误no member named 'x' in 'Derived'.据我所知,这是正确的代码.我正在做什么有什么问题,如果没有,有没有办法让这个工作在Clang?
在一个示例中vector<int> someVector,istringstream someStringStream你可以这样做:
for (int i=0; i < someVector.size(); i++) {
someStringStream >> someVector[i];
}
Run Code Online (Sandbox Code Playgroud)
我知道这vector<bool>是一个有效的实现,并operator[]返回一个引用对象.对于这段代码,我应该使用索引而不是迭代器,主要是为了提高可读性.目前,我正在使用这个:
for (int i=0; i < someVector.size(); i++) {
bool temp;
someStringStream >> temp;
someVector[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
是否有更直接的方式来实现这一点?