blob: cec43e7c83f6ed8f1346eb24072a647afb73f921 [file] [log] [blame]
%module template_typedef_funcptr
//Bug #1832613
#if !defined(SWIGR)
// R Swig fails on this test. Because it tries to return a nil SEXP in
// an error
%include <std_string.i>
%inline %{
#include <string>
template<typename T> class Ptr {};
class MCContract {};
typedef Ptr<MCContract> MCContractPtr;
%}
%template() Ptr<MCContract>;
%inline %{
template <class Contract, typename ContractID, typename CallbackType>
class ContractFactory
{
public:
static ContractFactory<Contract,ContractID,CallbackType> &getInstance() {
static ContractFactory<Contract, ContractID, CallbackType> instance;
return instance;
}
};
/**
* CreateXXContractCallback is a pointer to a function taking no arguments and
* returning a pointer to an XXContract.
*/
typedef MCContractPtr (*CreateMCContractCallback)();
%}
//Get around it by changing this:
%template(MCContractFactory) ContractFactory<MCContract, std::string, CreateMCContractCallback>;
//to a form which expands the typedef:
//%template(MCContractFactory) ContractFactory<MCContract, std::string, Ptr<MCContract>(*)()>;
%inline %{
typedef MCContractPtr* ContractPtrPtr;
%}
// Plain pointers were also causing problems...
%template(MCContractFactory2) ContractFactory<MCContract, std::string, ContractPtrPtr>;
#endif