我想知道以下问题是否有优雅的解决方案:
假设我想要一个变量保存一个非常复杂的类型的值,并且编译器会自动推断它的类型,但由于在 if 语句中初始化,首先在代码中声明并稍后给出值。
例如:
{
auto a;
if (some predicate)
a = init_a(1);
else
a = init_a(2);
}
Run Code Online (Sandbox Code Playgroud)
显然这段代码不能编译,但我认为编译器拥有推断类型所需的所有信息。
如果 'a' 只是一个 int,这不是问题,但如果类型是一个复杂的模板,我不想写它(或者在某些情况下甚至知道它)。另外,我不想调用 a 的默认构造函数然后重写它。
可能的解决方案:
这些中的每一个都有其自身的缺点。
有没有更优雅的解决方案?
我的项目链接到静态库libA.a版本1。
此可执行文件还链接到另一个静态库B。B链接到A,但版本2。
A版本1和2中的两个符号集都相同。如果我知道在我的项目和B之间没有与A有任何关系的共享,是否应该这样做?
我设法手动将其链接起来,并且似乎可以正常工作(也许有我不知道的陷阱)。
我不能将lib B设为共享对象,也不能将A用作共享对象。实际上,我只知道B静态地使用A,因为我和写B的那个人聊天。