gpt4 book ai didi

c++ - 主函数可以是模板吗? (安全的命令行参数解析)

转载 作者:可可西里 更新时间:2023-11-01 18:40:43 26 4
gpt4 key购买 nike

main函数可以这样声明吗:

template<typename T1, typename T2>
int main(T1 argc, T2 *argv[])
{
}

对于实例化 T1 = intT2 = char 我们最终得到一个共同的签名。

main 的限制没有提及模板:

  • 程序中没有其他函数可以调用main

  • main 不能定义为内联或静态。

  • 不能从程序中调用 C++main。

  • C++ 无法获取main地址。

  • C++的main函数不能重载。

显然没有这种语法的应用,但是

  • 是否有实现它的编译器?
  • 在实现类似的事情时是否存在任何逻辑障碍

编辑

我第一次尝试询问上述问题时有点含糊。有一些(理所当然的)关于这个问题的负面评论,所以我应该一些关于征求关于这个主题的反馈的推理:

  • C++ 是一种不断发展的语言,也许这是要实现的并且有人意识到了这一点

  • 有人可以告诉我为什么 main 有它的局限性

  • 语言律师可以找到标准中的漏洞以允许这样的声明(恰恰相反)

  • 模块系统的发展将语言推向了组件分离的逻辑(目前就编译单元而言)。也许这会影响我们生成编译单元的方式,也许多个 main 函数要跨子模块定义,在这种情况下,将需要一个更灵活的 main。

模板化 main 的示例用例

如果标准允许这样的事情(在未来)我们可以写

template<typename... Args>
int main(Args&& ...vs)
{
}

好了,安全的命令行参数解析(我发明了轮子还是什么?)

最佳答案

这个:

template<typename T1, typename T2>
int main(T1 argc, T2 *argv[])
{
}

实际上是一个函数模板。根据 §3.6.1/1,标准要求 main 是一个函数:

A program shall contain a global function called main, which is the designated start of the program.

就像类模板不是一回事一样,函数函数模板是两个不同的东西事物。更具体地说,根据 §14.1:

A template defines a family of classes or functions or an alias for a family of types.

因此,一个函数模板可以“生成”一个潜在无限的函数集。

†​​ 有争议

关于c++ - 主函数可以是模板吗? (安全的命令行参数解析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com