小编use*_*594的帖子

没有定义的自动变量声明

我想知道以下问题是否有优雅的解决方案:

假设我想要一个变量保存一个非常复杂的类型的值,并且编译器会自动推断它的类型,但由于在 if 语句中初始化,首先在代码中声明并稍后给出值。

例如:

{
  auto a;
  if (some predicate)
      a = init_a(1);
  else
      a = init_a(2);
}
Run Code Online (Sandbox Code Playgroud)

显然这段代码不能编译,但我认为编译器拥有推断类型所需的所有信息。

如果 'a' 只是一个 int,这不是问题,但如果类型是一个复杂的模板,我不想写它(或者在某些情况下甚至知道它)。另外,我不想调用 a 的默认构造函数然后重写它。

可能的解决方案:

  1. 模板“a”的类型。
  2. 使用 lambda 初始化 'a' 并将谓词移动到 lambda 中。
  3. 只需写'a'的类型而不是自动。
  4. 使用 void 指针/shared_ptr,然后在堆上初始化 'a'。

这些中的每一个都有其自身的缺点。

有没有更优雅的解决方案?

c++ auto

6
推荐指数
2
解决办法
101
查看次数

链接到静态库的多个版本

我的项目链接到静态库libA.a版本1。

此可执行文件还链接到另一个静态库B。B链接到A,但版本2。

A版本1和2中的两个符号集都相同。如果我知道在我的项目和B之间没有与A有任何关系的共享,是否应该这样做?

我设法手动将其链接起来,并且似乎可以正常工作(也许有我不知道的陷阱)。

我不能将lib B设为共享对象,也不能将A用作共享对象。实际上,我只知道B静态地使用A,因为我和写B的那个人聊天。

c linux linker cmake

5
推荐指数
1
解决办法
1576
查看次数

标签 统计

auto ×1

c ×1

c++ ×1

cmake ×1

linker ×1

linux ×1