我想知道为什么WPA2-PSK的密码只有63个字符的限制.它甚至不是两个人的力量,对我来说看起来很不寻常,但肯定对这个数字有一些更深刻的含义.
假设我的程序需要表单的参数[ 0.562 , 1.4e-2 ](即浮点数对),我应该如何在没有正则表达式的情况下用C++解析这个输入?我知道在用户输入时需要考虑很多极端情况,但我们假设给定输入与上述格式紧密匹配(除了更多的空格).
在C中,我可以做一些类似于sscanf(string, "[%g , %g]", &f1, &f2);提取两个浮点值的东西,这非常紧凑.
在C++中,这是我到目前为止所提出的:
std::string s = "[ 0.562 , 1.4e-2 ]"; // example input
float f1 = 0.0f, f2 = 0.0f;
size_t leftBound = s.find('[', 0) + 1;
size_t count = s.find(']', leftBound) - leftBound;
std::istringstream ss(s.substr(leftBound, count));
string garbage;
ss >> f1 >> garbage >> f2;
if(!ss)
std::cout << "Error while parsing" << std::endl;
Run Code Online (Sandbox Code Playgroud)
我怎么能改进这段代码?特别是,我关注garbage字符串,但我不知道如何跳过,这两个值之间.
我有一个关于C++继承的非常基本的问题:
class A
{
public:
void foo() { print(); }
protected:
void print() {}
};
class B : public A
{
protected:
void print() { std::cout << "test" << std:: endl; }
};
Run Code Online (Sandbox Code Playgroud)
现在以下代码
B b;
b.foo();
Run Code Online (Sandbox Code Playgroud)
不打印任何东西,所以foo()显然没有调用新定义的print().这只能通过虚拟方法解决吗?
我想写一个ContentManager为游戏加载和维护不同类型资产的类(与XNA的ContentManager相比).我的头文件如下所示:
class ContentManager
{
public:
ContentManager(Direct3D& d3d, const std::string& rootDirectory = "Resource");
~ContentManager();
template<typename T>
const T& Load(const std::string& assetName);
private:
Direct3D& d3d_;
std::string rootDirectory_;
std::map<std::string, Texture> textures_;
};
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个每种资产类型的地图(目前只针对纹理)和一个泛型Load<T>()方法,我会为我想要存储的每种资产类型显式实例化.Load<Texture>()从磁盘读取图像文件(如果它尚未在地图中),创建一个新的Texture,将其插入到地图中并返回它.
我的Texture班级基本上创建和封装了原始IDirect3DTexture9遵循RAII成语(析构函数调用Release()的texture_):
class Texture
{
public:
Texture();
Texture(Direct3D& d3d, unsigned int width, unsigned int height,
const std::vector<unsigned char>& stream);
~Texture();
IDirect3DTexture9* GetD3DTexture() const { return texture_; }
private:
IDirect3DTexture9* texture_;
}; …Run Code Online (Sandbox Code Playgroud)