Browse Source

Merge pull request #90 from sk-havok/req/non_class_base

Handle non-TagDecl bases by ignoring them (#89)
pull/92/head
João Matos 12 years ago
parent
commit
b1dfdea8d3
  1. 2
      src/AST/Class.cs
  2. 2
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  3. 1
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  4. 11
      tests/Basic/Basic.h

2
src/AST/Class.cs

@ -213,7 +213,7 @@ namespace CppSharp.AST @@ -213,7 +213,7 @@ namespace CppSharp.AST
public Method GetRootBaseMethod(Method @override, bool onlyFirstBase = false)
{
return (from @base in Bases
where !onlyFirstBase || !@base.Class.IsInterface
where @base.IsClass && (!onlyFirstBase || !@base.Class.IsInterface)
let baseMethod = (
from method in @base.Class.Methods
where

2
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -545,7 +545,7 @@ namespace CppSharp.Generators.CLI @@ -545,7 +545,7 @@ namespace CppSharp.Generators.CLI
private bool GenerateClassConstructorBase(Class @class, bool isIntPtr, Method method = null)
{
var hasBase = @class.HasBase && !@class.Bases[0].Class.Ignore;
var hasBase = @class.HasBase && @class.Bases[0].IsClass && !@class.Bases[0].Class.Ignore;
if (!hasBase)
return false;

1
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -716,6 +716,7 @@ namespace CppSharp.Generators.CSharp @@ -716,6 +716,7 @@ namespace CppSharp.Generators.CSharp
{
bases.AddRange(
from @base in @class.Bases
where @base.IsClass
select QualifiedIdentifier(@base.Class));
}

11
tests/Basic/Basic.h

@ -153,3 +153,14 @@ struct DLL_API DefaultParameters @@ -153,3 +153,14 @@ struct DLL_API DefaultParameters
void Bar() const;
void Bar();
};
// The Curiously Recurring Template Pattern (CRTP)
template<class Derived>
class Base
{
// methods within Base can use template to access members of Derived
Derived* create() { return new Derived(); }
};
class Derived : public Base<Derived>
{
};

Loading…
Cancel
Save