我有一个对象作为没有默认构造函数的成员的类。我想在构造函数中初始化这个成员,但似乎在C++中我无法做到这一点。这里是类:是否有可能将成员初始化推迟到构造函数体?
#include <boost/asio.hpp>
#include <boost/array.hpp>
using boost::asio::ip::udp;
template<class T>
class udp_sock
{
public:
udp_sock(std::string host, unsigned short port);
private:
boost::asio::io_service _io_service;
udp::socket _sock;
boost::array<T,256> _buf;
};
template<class T>
udp_sock<T>::udp_sock(std::string host = "localhost",
unsigned short port = 50000)
{
udp::resolver res(_io_service);
udp::resolver::query query(udp::v4(), host, "spec");
udp::endpoint ep = *res.resolve(query);
ep.port(port);
_sock(_io_service, ep);
}
编译器告诉我,基本上,它找不到UDP ::插座一个默认的构造,并通过我的研究,我了解C++隐式调用构造函数之前,每一个成员初始化。有没有办法以我想要的方式去做,或者它是否太“面向Java”,在C++中不可行?
我工作围绕这一问题通过定义这样我的构造函数:
template<class T>
udp_sock<T>::udp_sock(std::string host = "localhost",
unsigned short port = 50000) : _sock(_io_service)
{
udp::resolver res(_io_service);
udp::resolver::query query(udp::v4(), host, "spec");
udp::endpoint ep = *res.resolve(query);
ep.port(port);
_sock.bind(ep);
}
所以我的问题是更多的是出于好奇和更好地理解面向对象的C++
或者您可以驱逐在外面的功能在体内产生的计算:'udp_sock ():_sock(myfunc()){}' – 2010-03-17 17:29:25