How about:
    
    
    type
      MyImplementationA = object
      
      MyImplementationB = object
        m_foo,m_bar: int
    
    proc foo(this: MyImplementationA): int =
      return 17
    
    proc bar(this: MyImplementationA): int =
      return 4
    
    proc foo(this: MyImplementationB): int =
      return this.m_foo
    
    proc bar(this: MyImplementationB): int =
      return this.m_bar
    
    proc foobar[T](mi: T): int =
      return mi.foo() + mi.bar()
    
    var a = MyImplementationA()
    var b = MyImplementationB(m_foo: 32, m_bar: 8)
    
    echo foobar(a)
    echo foobar(b)
    

Reply via email to