代码之家  ›  专栏  ›  技术社区  ›  Dominik Weber

Howto:C++函数,根据调用者的需求调整其返回类型

  •  0
  • Dominik Weber  · 技术社区  · 1 年前

    我有一个类似malloc的函数:

    void * MyMalloc(size_t size) { return malloc(size); }

    现在,让我们把它用于char*类型;

    char * charPointer = static_cast<char *>(MyMalloc(100));

    如何摆脱演员阵容?

    我可以这样做:

    template<typename T> T MyMalloc(size_t size) {return static_cast<T>(MyMalloc(size));}

    调用代码为:

    char * charPointer = MyMalloc<char *>(100);

    这看起来更好,但有没有办法让编译器为我做这件事? 与auto类似,但我对auto的理解是,auto是由返回/赋值类型决定的,而不是由调用者的需求决定的。

    我希望调用代码看起来像是:

    char * charPointer = MyMalloc(100);

    当然,这样的代码是行不通的(我也不希望如此):

    int val = MyMalloc(100);

    我不确定这能不能做到,但这是可以做到的,我相信这里有人知道。 泰

    1 回复  |  直到 1 年前
        1
  •  1
  •   NathanOliver    1 年前

    您可以为此使用类类型。类可以有一个模板转换运算符,它将根据所使用的表达式推断出要转换的类型。这给了你一个看起来像

    class MyMalloc
    {
    public:
        MyMalloc(std::size_t size) : ptr(malloc(size)) {}
        template <typename T>
        operator T() { return static_cast<T>(ptr); }
    private:
        void* ptr;
    };
    

    这让你可以像这样使用它

    int main()
    {
        char * charPointer = MyMalloc(100);
    }
    

    你可以看到它在这里工作 live example .