我一直在使用std::atoll
from cstdlib
将字符串转换为int64_t
带有gcc 的字符串.该工具似乎在Windows工具链上不可用(使用Visual Studio Express 2010).什么是最好的选择?
我也有兴趣转换strings
成uint64_t
.整数定义取自cstdint
.
比如说,我的头文件是:
class A
{
void Complicated();
}
Run Code Online (Sandbox Code Playgroud)
和我的源文件
void A::Complicated()
{
...really long function...
}
Run Code Online (Sandbox Code Playgroud)
我可以将源文件拆分为
void DoInitialStuff(pass necessary vars by ref or value)
{
...
}
void HandleCaseA(pass necessary vars by ref or value)
{
...
}
void HandleCaseB(pass necessary vars by ref or value)
{
...
}
void FinishUp(pass necessary vars by ref or value)
{
...
}
void A::Complicated()
{
...
DoInitialStuff(...);
switch ...
HandleCaseA(...)
HandleCaseB(...)
...
FinishUp(...)
}
Run Code Online (Sandbox Code Playgroud)
完全是为了可读性而不担心性能方面的影响?
C++中是否有逻辑&运算符?例如,一个与&&一样工作的运算符,除了它还评估后面的参数,即使前面的参数已经评估为false?运算符&是我理解的按位和运算符.
我正在尝试创建一个只能在一台机器上运行的可执行文件.实现这一目标的最简单方法是什么?许可证文件?或者是否有一个机器地址非常类似于网络连接的MAC我可以硬编码到可执行文件中?
template <typename T>
using operator_square_brackets = decltype(&T::operator[]);
Run Code Online (Sandbox Code Playgroud)
它在视觉工作室失败了
error C2760: syntax error: expected ')' not ']'
Run Code Online (Sandbox Code Playgroud)
有想法该怎么解决这个吗?
我发现制作一个不可复制的类对我的代码质量有很大帮助.最初我用boost :: noncopyable做了这个,但我发现VC++编译器错误没有私有成员那么有用(双击导致代码中的错误位置).
T(T const&);
T& operator=(T const&);
Run Code Online (Sandbox Code Playgroud)
事实上,它已经提醒我很多案例没有通过课程作为参考.这么多,即使在我只需要复制构造一次的类上,我也非常希望得到警告.
有没有办法做到这一点?我想的是将上面两个方法保留为私有并添加一个公共T(T const&,bool dummy)构造函数来调用,当我真的想要复制构造时.或者可以选择将上面的两个方法公开,并在复制构造时以某种方式激活编译器警告,抑制我想要的警告.
或者也许有更好的方式?
只是想知道,如果我有一个指向最派生类的指针,并在其上调用一个虚拟函数(大多数派生类定义),这是否仍会导致虚拟表中的查找?
毕竟,在编译时,编译器知道这个类是派生最多的,它知道它定义了虚函数,没有歧义,所以它应该只把它当作非虚函数?
或者我错过了什么?
我问的原因是我正在编写一个模板,我想从后面派生出来合并代码,不同的函数将在派生类中实现.
没有必要在模板中将这些函数定义为虚拟,但如果稍后忽略该虚拟调用,我正在考虑这样做,纯粹是为了向实现者可视化,以后需要仍然编写哪些函数.
我经常发现自己编写非常简单的类而不是C风格的结构.它们通常看起来像这样:
class A
{
public:
type mA;
type mB;
...
A(type mA,type mB,...) : mA(mA),mB(mB),... {}
}
Run Code Online (Sandbox Code Playgroud)
这是一种明智的做事方式吗?如果是,我想知道是否有任何第三方插件或任何方便的捷径来自动构造构造函数的文本(例如,采用突出显示或存在的成员定义,用逗号替换分号,将所有内容移动到同一行, ...)?谢谢
我目前有一个非常简单的boost :: asio服务器,在连接时发送状态更新(使用google proto缓冲区):
try
{
boost::asio::io_service io_service;
tcp::acceptor acceptor(io_service,tcp::endpoint(tcp::v4(), 13));
for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket);
...
std::stringstream message;
protoMsg.SerializeToOstream(&message);
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(message.str()), ignored_error);
}
}
catch (std::exception& e) { }
Run Code Online (Sandbox Code Playgroud)
我希望在接受新连接后将其扩展到第一次读取,检查收到的请求,并根据此消息发回不同的消息.我还想保持TCP连接打开,以便客户端不必重新连接,并且想要处理多个客户端(不是很多,可能是2或3).
我看了几个关于boost asio的例子,即异步时间tcp服务器和聊天服务器,但两者都有点超过我的想法.我甚至不知道我是否需要异步服务器.我想我之后可以做一个阅读acceptor.accept(socket)
,但我想我不会继续听取进一步的请求.如果我进入循环,我想这意味着我只能处理一个客户端.所以我猜这意味着我必须去异步?是否有一个更简单的例子可能不是250行代码?或者我只是想通过这些例子咬我的方式?谢谢
c++ ×10
boost-asio ×1
constructor ×1
inheritance ×1
int64 ×1
noncopyable ×1
performance ×1
security ×1
sfinae ×1
sockets ×1
strtol ×1
tcp ×1
templates ×1
uint64 ×1
virtual ×1