#include <iostream>
#include <vector>
#include <string>
#include <tuple>
#include <utility>
using namespace std;
class defaultValues
{
public:
static std::tuple<bool,int,unsigned int, size_t, double, float, std::string,
std::wstring > tup;
static decltype(std::get<0>(tup))& getDefault(bool ) { return std::get<0>(tup); }
static decltype(std::get<1>(tup))& getDefault(int ) { return std::get<1>(tup); }
static decltype(std::get<2>(tup))& getDefault(decltype(std::get<2>(tup) )) { return std::get<2>(tup); }
static decltype(std::get<3>(tup))& getDefault(decltype(std::get<3>(tup))) { return std::get<3>(tup); }
static decltype(std::get<4>(tup))& getDefault(double ) { return std::get<4>(tup); }
static decltype(std::get<5>(tup))& getDefault(decltype(std::get<5>(tup)) ) { return std::get<5>(tup); }
static decltype(std::get<6>(tup))& getDefault(decltype(std::get<6>(tup)) &) { return std::get<6>(tup); }
static decltype(std::get<7>(tup))& getDefault(decltype(std::get<7>(tup)) &) { return std::get<7>(tup); }
};
std::tuple<bool,int,unsigned int, size_t, double, float, std::string,
std::wstring> defaultValues::tup = std::make_tuple(false,int(0),0,size_t(0), double(0.0),float(0.0),std::string(""),std::wstring(L""));
int main() {
std::cout<<defaultValues::getDefault(false)<<std::endl;
// your code goes here
return 0;
}
現在我有一些問題,
- 我覺得代碼應該可以使用模板進行壓縮。我試過類似的東西
template<int N>
static decltype(std::get<N>(tup))& getDefault(bool ) { return std::get<N>(tup); }
替換功能,但它沒有用。
- 為什么我不能
decltype<std::get<0>>在第一個函式中使用代替 bool。當我這樣做時,我會產生一些歧義,編譯器會抱怨。
我會很感激我能得到的所有輸入。
uj5u.com熱心網友回復:
只要你的元組中沒有重復的型別,你就可以使用 的型別版本get將代碼減少到
class defaultValues
{
public:
static std::tuple<bool,int,unsigned int, size_t, double, float, std::string,
std::wstring > tup;
template <typename T>
static auto& getDefault(T) { return std::get<T>(tup); }
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312601.html
下一篇:模板推導和隱式建構式
