2012-12-15 48 views
0

我正在使用對boost and std::tuple<>有很好支持的SOCI庫。如何推廣一個接口來要求某個元組的返回值?

我的目的是定義一個抽象接口稱爲SOCI_Streamable它要求返回一些元組的方法。

我有它在GCC 4.7.2工作了特定的元組,但我需要幫助抽象此接口爲任何元組工作。

換句話說,我想將這個需求轉換爲代碼:如果一個類能夠返回某種std :: tuple,我就不會滿足SOCI_Streamable的要求 - 我不在乎是什麼類型的。

只要符合要求,以下代碼的重大變化就沒有問題。我懷疑某種模板代碼,或者甚至需要CRTP,但我不確定。

#include<tuple> 

// want to generalize next line to any std::tuple<> 
typedef std::tuple<int const&,char const> some_tuple;  

class SOCI_Streamable 
{ 
public: 
    virtual some_tuple obj_as_tuple() const = 0; 
}; 

class Foo : 
    public SOCI_Streamable 
{ 
public: 
    virtual some_tuple obj_as_tuple() const 
    { 
     return std::forward_as_tuple(m_int, m_char); 
    } 
private: 
    int m_int; 
    char m_char; 
}; 

int main(int argc, char* argv[]) 
{ 
} 
+0

您可以指定實施課程級別的類型嗎? –

+0

@KarthikT肯定,但問題仍然是在界面層面上將其綁定到一些抽象界面......如果你有一個想法如何做到這一點,請發表一個答案 - ty – kfmfe04

+0

你想要能夠將該對象投射到SOCI_Streamable然後調用接口?我看不出你如何做到這一點,因爲在編譯時無法知道返回類型。或者你可以基礎類是一些模板化的SOCI_Streamable實例嗎? – rici

回答

1
template <class A,class B> 
class SOCI_Streamable 
{ 
public: 
    typedef std::tuple<A,B> Tuple; 
    virtual Tuple obj_as_tuple() const = 0; 
}; 

class Foo : 
    public SOCI_Streamable<int const&,char const> 
{ 

如果你可以指定類型的實施者水平,這應該工作。但是,這確實將單一界面變成了一系列界面。讓我看看是否有更好的方法 。

相關問題