0

我正在使用对boost 和 std::tuple<>有很好支持的 SOCI 库。

我的意图是定义一个调用的抽象接口SOCI_Streamable,它需要一个返回一些 tuple的方法。

我让它适用于 gcc 4.7.2 中的特定元组,但我需要帮助抽象这个接口以适用于任何 tuple

换句话说,我想把这个要求转换成代码:一个类满足SOCI_Streamable它是否可以返回某种 std::tuple 的要求——我不在乎是什么样的。

只要满足要求,对下面的代码进行重大更改就可以了。我怀疑某种模板代码甚至可能需要 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[] )
{
}
4

1 回答 1

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>
{

如果您可以在实现者级别指定类型,则应该可以。但这确实将单个接口变成了一系列接口。让我看看是否有更好的方法。

于 2012-12-15T05:52:57.863 回答