2017-12-07 10 views
0

私は struct Data<std::pair<F, S><<val.first()val.second()要素にできるようにしたいです。 FSは、struct Data<int>(特定のタイプ)のように指定することができるという意味で一般的でなければなりません。私はstruct Data<std::pair<F, S>のテンプレートを、struct DataとしてFまたはSとしか書けないように書く方法を知らない。テンプレートコンテナにメンバ関数へのアクセス

#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <utility> 

template <typename T> 
struct Data; 

template <typename T> 
std::ostream& operator<<(std::ostream& os, const Data<T>& val) { 
    return val(os); 
} 

template <typename T> 
Data<std::remove_cv_t<T>> data(const T& val) { return { val }; } 

template <> 
struct Data<int> { 
    std::ostream& operator()(std::ostream& os) const { 
     os << val; 
     return os; 
    } 
    const int& val; 
}; 

//More struct Data for templatized types for other specific types 


template <typename F, typename S> 
struct Data<std::pair<F, S> > { 
    std::ostream& operator()(std::ostream& os) const { 
     os << data(val.first()) << data(val.second()); 
     return os; 
    } 
    std::pair<F, S> val; 
}; 

//More struct Data templatized for other container types 

テストエラーがある:

error: called object type 'int' is not a function or function pointer 
        os << data(val.first()) << data(val.second()); 
           ^~~~~~~~~ 

答えて

0

firstsecondは、2つ(パブリック)メンバーのstdの変数 ::ペアで、彼らはメンバ関数ではありません。

os << data(val.first()) << data(val.second()); 

os << data(val.first) << data(val.second); 
なり
関連する問題