我使用python的threding模块创建了一个简单的多线程tcp服务器.每次连接新客户端时,此服务器都会创建一个新线程.
#!/usr/bin/env python
import socket, threading
class ClientThread(threading.Thread):
def __init__(self,ip,port):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
print "[+] New thread started for "+ip+":"+str(port)
def run(self):
print "Connection from : "+ip+":"+str(port)
clientsock.send("\nWelcome to the server\n\n")
data = "dummydata"
while len(data):
data = clientsock.recv(2048)
print "Client sent : "+data
clientsock.send("You sent me : "+data)
print "Client disconnected..."
host = "0.0.0.0"
port = 9999
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind((host,port))
threads = []
while True:
tcpsock.listen(4)
print "\nListening for incoming …
Run Code Online (Sandbox Code Playgroud) 在Qt中有一个宏允许为类声明私有拷贝构造函数和赋值运算符:http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#Q_DISABLE_COPY
据说这个宏应该用于所有QObject(尤其是QWidget)派生类.
我理解这是如何工作的以及为什么它有用.
我不明白:有什么理由在我的QObject派生类中重复Q_DISABLE_COPY而QObject已经包含Q_DISABLE_COPY并且通过这有效地防止了我的派生类被复制了吗?
很好地定义了C++将std :: vector传递给期望输出数组的C API,因为std :: vector是连续的:
std::vector<char> myArray(arraySize);
cStyleAPI(&myArray[0], arraySize);
Run Code Online (Sandbox Code Playgroud)
将std :: string以相同的方式传递给C API是否安全?在标准C++ 03中是否有任何保证std :: string是连续的并且在这种情况下以与std :: vector相同的方式工作?
我正在阅读现代C++设计,我想到了类型列表构造可以由可变参数模板替换.两者似乎都依赖递归来分别处理列表中的第一个类型和列表的其余部分.是否有任何类型列表允许您这样做,变量模板不会?
我已经开始在我的代码中使用GLM库.看起来很不错但我做不到这样的事情:
void foo (const glm :: vec3 & arg);
foo ({x, y, z});
Run Code Online (Sandbox Code Playgroud)
因为构造函数都是显式的.
这开始惹恼了我.我想不出有理由禁止隐含构造这种简单的值类型.作者是否盲目地遵循一些无关紧要的格言,或者他们知道我不知道的事情吗?
我最近在代码审查期间提出了一个关于一段lua代码的问题.有问题的代码是刷新缓存并使用一些数据重新初始化它:
for filename,_ in pairs(fileTable) do
fileTable[filename] = nil
end
-- reinitialize here
Run Code Online (Sandbox Code Playgroud)
是否有任何理由不应该用这个替换上面的循环?
fileTable = { }
-- reinitialize here
Run Code Online (Sandbox Code Playgroud) 鉴于以下类声明:
class phone_number
{
public:
explicit phone_number( std::string number ) noexcept( std::is_nothrow_move_constructible< std::string >::value );
}
phone_number::phone_number( std::string number ) noexcept( std::is_nothrow_move_constructible< std::string >::value )
: m_originalNumber{ std::move( number ) }
{
}
Run Code Online (Sandbox Code Playgroud)
std::terminate()
如果从字符串构造函数抛出异常,下面的代码行是否会因为noexcept规范而立即调用?
const phone_number phone("(123) 456-7890");
Run Code Online (Sandbox Code Playgroud) 通过boost的weak_ptr的1.53标题,我惊讶地看到移动赋值和移动构造函数已经实现,即使它们没有记录.从本文档中,没有任何要求std :: weak_ptr提供移动功能.
通过Visual Studio 2012的weak_ptr实现,我没有注意到在weak_ptr中声明了任何明显的移动操作,尽管它们可能隐藏在继承之后.但是,此代码导致监视窗口报告指针的一个共享引用和两个弱引用,这使我相信weak_ptr未启用移动:
std::shared_ptr<int> ptr(std::make_shared<int>(5));
std::weak_ptr<int> weakptr(ptr);
std::weak_ptr<int> movedWeakPtr(std::move(weakptr));
Run Code Online (Sandbox Code Playgroud)
是否有充分的理由说std :: weak_ptr不提供移动功能?如果没有,weak_ptr应该被视为可移动类型吗?
随着下面的教程在这里得到一个介绍的OpenGL 3.3,我明白,顶点和索引缓冲区必须以发出指令,他们glBindBuffer()的约束.提到可以通过将一个0的句柄传递给glBindBuffer()来取消绑定缓冲区,这在使用它时防止意外使用不正确的缓冲区似乎是一个好主意.在发出设置或绘制调用后,有没有理由不总是取消绑定顶点和索引缓冲区?
Octave中是否有内置函数来计算矩阵的逐元素倒数,或者是否需要实现运行代码的函数mRecip = ones(size(m)) ./ m
?
快速搜索"recip"或"reciprocal"的文档并没有产生任何有用的信息.
以下模板定义
template <typename Func, typename ReturnType, typename... Arguments>
class Command
{
public:
Command(Func f) : m_func(f) { }
ReturnType operator()(Arguments... funcArgs) { return m_func(funcArgs...); }
private:
Func m_func;
};
Run Code Online (Sandbox Code Playgroud)
使用以下测试代码实例化时,使用gcc 4.7.3(错误:字段'Command :: m_func'无效声明的函数类型)给出错误消息:
void testFunction(int i, double d)
{
std::cout << "TestFunctor::operator()(" << i << ", " << d << ") called." << std::endl;
}
int main()
{
void (&fRef)(int, double) = TestFunction;
Command<void(int, double), void, int, double> testCommand(fRef);
}
Run Code Online (Sandbox Code Playgroud)
如果我将没有address-of运算符的TestFunction传递给testCommand构造函数,也会出现错误消息,但如果我传递一个显式命名的函数指针或使用address-of运算符传递参数,则会消失.我认为这段代码应该适用于Modern C++ Design的第5章.
无法存储函数引用的原因是什么,但函数指针工作正常?是否有任何变通方法可以在不失去支持的情况下编译,同时也可以将函数作为参数传递给Command的构造函数?
我在向bool引用转换char引用时遇到问题.我有一个简单的GUI库,具有以下方法gui->addButton(string name, bool& value);
.如果单击该按钮,则会翻转bool.现在我想拥有一个动态/未知的按钮.因此,虽然我可以创建一个bool向量,但只需为每个创建的按钮push_back一个新的bool,并为addButton方法提供对最后一个向量元素的引用.像这样的东西:
bool isOnFlag = true;
buttonFlagVector.push_back(isOnFlag);
gui->addButton(name, buttonFlagVector.back());
Run Code Online (Sandbox Code Playgroud)
可悲的是,因为bool的矢量专门化,这是行不通的.
从我读到的,避免bool专业化的常用方法是使用a std::vector<char>
.我试过了,我遇到的问题是我不知道如何从char引用转换为bool引用.dynamic_cast
reinterpret_cast
?他们似乎都没有工作.
有人能指出我正确的方向吗?提前致谢!