A possible workaround would be the following:
class MexFunction : public matlab::mex::Function
{
private:
    std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr;
    ArrayFactory factory;
    std::ostringstream stream;
    void displayError(std::string errorMessage)
    {
        matlabPtr->feval(matlab::engine::convertUTF8StringToUTF16String("error"),
                0, std::vector<Array>({
        factory.createScalar(errorMessage) }));
    }
    void println(void)
    {
        stream << std::endl;
        matlabPtr->feval(   u"fprintf",
                            0,
                            std::vector<Array>(
                                {
                                    factory.createScalar(stream.str())
                                }
                            )
                        );
        stream.str("");
    }
    std::string getSignatureFromHandle(Array handle){
        if (handle.getType() != ArrayType::HANDLE_OBJECT_REF)
            displayError("Non function-handle passed");
        std::vector<Array> out = matlabPtr->feval(u"func2str",1,std::vector<Array>({handle}));
        if (out.size()!=1)
            displayError("Not enough return values from func2str");
        if (out[0].getType() != ArrayType::CHAR)
            displayError("Problem calling func2str");
        size_t i;
        char fNameBuffer[255];
        TypedArray<char16_t> fName(std::move(out[0]));
        for (i=0;i<fName.getNumberOfElements();i++)
            fNameBuffer[i] = fName[i];
        fNameBuffer[fName.getNumberOfElements()] = '\0';
        return std::string(fNameBuffer);
    }
public:
    MexFunction() : matlabPtr(getEngine()) {}
    ~MexFunction() {}
    void operator()(ArgumentList outputs, ArgumentList inputs){
        if (inputs.size() <1)
            displayError("Need one input");
        std::string funcName = getSignatureFromHandle(inputs[0]);
        if (inputs.size()==2){
            std::vector<Array> retVal = matlabPtr->feval(funcName, 1, std::vector<Array>({inputs[1]}));
            outputs[0] = retVal[0];
        }
    }
};
Is there a more straight-forward solution?



