【问题标题】:Declare variables of a type indicated by a pointer声明由指针指示的类型的变量
【发布时间】:2015-06-08 08:37:59
【问题描述】:

我有:

const char  *ptr = "int";

如果我必须使用ptr 声明:

int a;

ptr 可以指向任意的charstring<anythihg>。 我必须删除 ptr 指向的那种类型的变量。 有可能吗?

【问题讨论】:

  • 你真的应该阅读 C++。您没有使用 std::string 的事实表明您不熟悉基本的 C++。
  • 你只是在谈论typedef吗? (即typedef ptr int; 然后ptr a = 5(或任何值)?
  • 你想用这个新创建的变量a做什么?我的意思是,即使像 if (!strcmp(ptr, "int")) int a; else if (!strcmp(ptr, "char")) char a; 这样愚蠢的东西也不能在 C 或 C++ 中工作。
  • @DavidC.Rankin 虽然您说得非常对,但这种说法充其量是令人困惑的。只是说。 :-)

标签: c++ c pointers types casting


【解决方案1】:

没有。 C++ 不是解释型语言。 "int" 对编译器有意义,但在运行时没有任何东西可以理解 "int"

【讨论】:

  • 从技术上讲,没有什么可以阻止 C++ 被解释(实际上存在 C++ 解释器),即使有,这个问题似乎与翻译方法没有任何关系.
  • 虽然 C++ 允许解释(微不足道 - 任何语言都可以),但 C++ 没有公开这种解释器的结构。这就是为什么我说它不是一种解释型语言,即使有解释型实现。用于比较的 Javascript(语言)有 eval,这使它成为一种解释性语言,即使某些 Javascript 实现使用编译技术。
  • 很公平。在你觉得有必要详细说明之前,我明白你在说什么。然而,我担心你错过了我所说的。请注意这里的重点:C++ 需要解释才能实现动态类型,但是这个问题的答案不需要涉及动态类型。类型推断(C++ 确实有)可以很容易地使用(实际上,应该使用)...
  • @undefinedbehaviour:我看不出类型推断将如何合成std::map<std::string, std::complex<double>>。 C++ 程序中的类型集是有限的。
  • 问题是问如何声明一个与ptr 指向的类型相同的变量... std::map<...> 是如何相关的?
【解决方案2】:

建议您根据自己的表达方式选择一种语言。

您所描述的不是标准 C 中的功能,并且您必须依赖的任何扩展都会将您锁定在特定的供应商中,在这种情况下,他们可能会决定在某个时候停止支持它......什么那会是一团糟,对吧?

在 C++ 领域,您可能会发现有用的 templates、decltypeauto 关键字或其他可能的选项?

【讨论】:

    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多