假設我正在創建一個類client
。我想client
能夠以下幾類構成:C++簡化構造函數重載
client(const boost::network::uri::uri &, const boost::network::uri::uri &)
client(const std::string &, const std::string &)
client(const char *, const char *)
但是......我也想所有的排列...
client(const boost::network::uri::uri &, const boost::network::uri::uri &)
client(const std::string &, const std::string &)
client(const char * &, const char * &)
client(const boost::network::uri::uri &, const std::string &)
client(const std::string &, const boost::network::uri::uri &)
client(const boost::network::uri::uri &, const char * &)
client(const char * &, const boost::network::uri::uri &)
client(const std::string &, const char * &)
client(const char * &, const std::string &)
它可以假設我的客戶類,爲簡單起見,簡單來說,如下所示。
#include <string>
#include <boost/network.hpp>
#define HOST_URI "..."
#define AUTH_URI HOST_URI"..."
namespace bn = boost::network;
class client
{
private:
const bn::uri::uri host_;
const bn::uri::uri auth_;
public:
client(const bn::uri::uri & host = const bn::uri::uri(HOST_URI),
const bn::uri::uri & auth = const bn::uri::uri(AUTH_URI));
client(const std::string & host = const std::string(HOST_URI),
const std::string & auth = const std::string(AUTH_URI));
client(const char * & host = HOST_URI,
const char * & auth = AUTH_URI);
client(const bn::uri::uri & host = const bn::uri::uri(HOST_URI),
const std::string & auth = const std::string(AUTH_URI));
client(const std::string & host = const std::string(HOST_URI),
const bn::uri::uri & auth = const bn::uri::uri(AUTH_URI));
client(const bn::uri::uri & host = const bn::uri::uri(HOST_URI),
const char * & auth = AUTH_URI);
client(const char * & host = HOST_URI,
const bn::uri::uri & auth = const bn::uri::uri(AUTH_URI));
client(const std::string && host = const std::string(HOST_URI),
const char * & auth = AUTH_URI);
client(const char * & host = HOST_URI,
const std::string && auth = const std::string(AUTH_URI));
};
,目前定義爲:
#include <string>
#include <boost/network.hpp>
namespace bn = boost::network;
client::client(const bn::uri::uri & host,
const bn::uri::uri & auth)
: host_(host), auth_(auth)
{
...
};
client::client(const std::string & host,
const std::string & auth)
: client(bn::uri::uri(host), bn::uri::uri(auth)){}
client::client(const char * & host,
const char * & auth)
: client(bn::uri::uri(host), bn::uri::uri(auth)){}
client::client(const bn::uri::uri & host,
const std::string & auth)
: client(host, bn::uri::uri(auth)){}
client::client(const std::string & host,
const bn::uri::uri & auth)
: client(bn::uri::uri(host), auth){}
client::client(const bn::uri::uri & host,
const char * & auth)
: client(host, bn::uri::uri(auth)){}
client::client(const char * & host,
const bn::uri::uri & auth)
: client(bn::uri::uri(host), auth){}
client::client(const std::string & host,
const char * & auth)
: client(bn::uri::uri(host), bn::uri::uri(auth)){}
client::client(const char * & host,
const std::string & auth)
: client(bn::uri::uri(host), bn::uri::uri(auth)){}
所以我的問題是,什麼是這樣做的正確的和簡單的方法?當然,我這次手動完成了所有的排列組合,但是將來我可以有3個以上的變量進行排列,這會變得很難看,很快。
如果'uri'有接受'的std :: string'或'字符常量*'構造函數,你將能夠減少很多構造函數。 – 2015-04-05 01:59:27
@RSahu它! C++是否執行某種隱式類型初始化? – 2015-04-05 01:59:50
編譯器將最多使用一個用戶定義的轉換。有關更多詳細信息,請參見http://en.cppreference.com/w/cpp/language/cast_operator。 – 2015-04-05 02:04:05