为什么不构造对象?

时间:2019-10-11 12:27:03

标签: c++

我正在使用模板编写一个类,该类可以从每个类派生。

我有两个版本,一个叫做timer.cancel(); ,另一个叫做God。代码相似。

代码显示:

Helper

一个人可以使用以下命令来编译并运行它:

#include <memory>
#include <iostream>
class ClassArgsZero
{
public:
    ClassArgsZero()
    {
        std::cout << "ClassArgsZero construct" << std::endl;
    }

private:
};

class ClassArgsTwo
{
public:
    ClassArgsTwo(int x_, std::string y_)
        : x(x_), y(y_)
    {
        std::cout << "ClassArgsTwo construct" << std::endl;
    }

private:
    int x;
    std::string y;
};

template <typename Object, typename... Args>
void function(Args &&... args)
{
    class Helper : public Object
    {
    public:
        Helper(Args &&... args)
            : Object{std::forward<Args>(args)...}
        {
            std::cout << "Helper construct" << std::endl;
        }
    };
    Helper help(std::forward<Args>(args)...);
}

template <typename Object, typename... Args>
class God : public Object
{
public:
    God(Args &&... args)
        : Object{std::forward<Args>(args)...}
    {
        std::cout << "God construct" << std::endl;
    }

private:
};

int main()
{
    God<ClassArgsTwo, int, std::string> god_1(2, "string");
    God<ClassArgsZero> god_2(); // why not construct?

    function<ClassArgsTwo, int, std::string>(2, "string");
    function<ClassArgsZero>(); // why construct here?

    return 0;
}

输出显示:

$ g++ main.cpp
$ ./a.out

结果显示未构建对象ClassArgsTwo construct God construct ClassArgsTwo construct Helper construct ClassArgsZero construct Helper construct ,因为终端中未打印god_2

我不完全理解为什么未使用基类I am God构建对象God

我也很困惑可以使用基类ClassArgsZero来构建对象Helper。这是为什么?

预先感谢您的帮助。

0 个答案:

没有答案