如何将using
语句合并到构造函数初始化列表中?
例如,而不是
foo::foo(int a, int b, int c) : a(a), b(b), c(something_long::tada(c)) {}
我想
// Invoking some 'using something_long::tada;' magic
foo::foo(int a, int b, int c) : a(a), b(b), c(tada(c)) {}
据推测,这看起来像是这个代码区域中所需的愚蠢的try / catch语法。从功能上讲,允许使用语句非常重要,因为something_long::tada(c)
和using something_long::tada; tada(c)
每个Koenig查找可以有不同的行为。
答案 0 :(得分:3)
命名空间别名会有帮助吗?
using SVLI = something::very::long::indeed;
foo::foo(int a, int b, int c) : a(a), b(b), c(SVLI::tada(c)) {}
答案 1 :(得分:2)
这取决于您需要键入多少级别的命名空间。如果需要输入相当多的命名空间级别,可以在静态函数中进行桥接:
class foo
{
//...
static int tada_again(int c)
{
return namespaceA::namespaceB::namespaceC::namespaceD::namespaceE::tada(c);
}
//...
};
foo::foo(int a, int b, int c) : a(a), b(b), c(tada_again(c))
{
}
如果没有多少级别的命名空间需要输入,从维护或代码可读性的角度来看,保持清除命名空间会更好。
答案 2 :(得分:1)
作为一个非常糟糕的黑客,你可以做的一件事就是拥有两个独立的实施文件。其中一个实现文件是一个普通的实现文件,您可以在其中实现除构造函数之外的所有。在第二个实现文件中,您将执行
#include "appropriate-header-file"
using namespace something_long;
foo::foo(int a, int b, int c): a(a), b(b), c(tada(c)) {};
这样,在编译构造函数时,编译器将使用using
声明使tada
缩短。但是,这不会污染标准实现文件中的命名空间。
希望这有帮助!