我正在使用模板编写一个类,该类可以从每个类派生。
我有两个版本,一个叫做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
。这是为什么?
预先感谢您的帮助。