可以像这样声明main函数:
template<typename T1, typename T2>
int main(T1 argc, T2 *argv[])
{
}
Run Code Online (Sandbox Code Playgroud)
对于实例化T1= int和T2= char我们最终得到一个共同的签名.
main没有提及模板的限制:
程序中没有其他功能可以称为main
main不能定义为内联或静态.
无法从程序中调用C++ main.
C++不能采用main的地址.
C++主函数不能重载.
显然没有这种语法的应用,但是
在我第一次尝试上述问题时,我有点模糊.(正确地)对这个问题有一些否定的评论,所以我应该就要求就这个主题提出反馈做出一些推理:
C++是一种不断发展的语言,也许这是实现的,有人意识到它
有人可以告诉我为什么 main它有限制
语言律师可以在标准中找到一个漏洞来允许这样的声明(恰好相反)
模块系统的发展将语言推向了组件分离的逻辑(就目前的编译单元而言).也许这会影响我们生成编译单元的方式,也许main在子模块中定义多个函数,在这种情况下需要更灵活的 main.
main如果标准允许类似的东西(将来)我们可以写
template<typename... Args>
int main(Args&& ...vs)
{
}
Run Code Online (Sandbox Code Playgroud)
你去,安全的命令行参数解析(我发明了轮子还是什么?)
Sho*_*hoe 17
这个:
template<typename T1, typename T2>
int main(T1 argc, T2 *argv[])
{
}
Run Code Online (Sandbox Code Playgroud)
实际上是一个功能模板.根据§3.6.1/ 1,标准要求main是一个功能:
程序应包含一个名为main的全局函数,它是程序的指定开始.
就像类和类模板不一样,函数和函数模板是两回事.更具体地说,根据§14.1:
模板定义类或函数族或类型族的别名.
因此一个功能模板可以"生成"一个潜在的无限†一组功能.
†是有争议的
R. *_*des 16
这取决于.在我自己的超级秘密和私人独立实施中,如果满足以下所有条件,您可以将主要功能设为模板.
m?in(请注意,第二个字母是西里尔字母,而不是拉丁字母).class,而不是dot-dot-dot typename之间没有空格class,并且dot-dot-dot和包名之间有一个空格.面对提出的问题,所有这些信息显然都是无用的,但谁在乎呢?至少它提到了独立实现和语言扩展.
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |