C++ 在库API中使用constexpr生成的类型

C++ 在库API中使用constexpr生成的类型,c++,c++11,c++14,api-design,boost-hana,C++,C++11,C++14,Api Design,Boost Hana,我参加了罗密欧·维托里奥这个周末在柏林会议上的一次演讲。在他的库中,他在Boost.Hana的顶部实现了一个,以便“构建”用于创建实际类型的设置: constexpr auto s = // . ecst::settings::make() // . .allow_inner_parallelism() // . .fixed_entity_limit(entity_

我参加了罗密欧·维托里奥这个周末在柏林会议上的一次演讲。在他的库中,他在Boost.Hana的顶部实现了一个,以便“构建”用于创建实际类型的设置:

constexpr auto s =                        // .
    ecst::settings::make()                // .
        .allow_inner_parallelism()        // .
        .fixed_entity_limit(entity_limit) // .
        .component_signatures(make_csl()) // .
        .system_signatures(make_ssl())    // .
        .scheduler(cs::scheduler<ss::s_atomic_counter>);

在我看来,这些都不是优雅的解决方案。强制使用decltype对我来说并不好

另一个解决方案是简单地将this auto type作为模板参数传递给一个类-这是ECST在中所做的-但是,它对用户有很大的限制,因为为了使用库,他必须模板化他的整个代码


你觉得怎么样?这里有一个优雅的解决方案吗?

仅仅使用第一块代码中的
s
不起作用吗?@JasonRice不,如果属性不是静态的,就不能使用auto。这段代码之所以有效,是因为在本例中它位于函数定义main中。啊,对不起,我错过了类部分的属性。用户是否定义了
s
?@JasonRice是的,用户仅使用您的第一个代码块中的
s
来定义SDoE无效?@JasonRice否,如果属性不是静态的,则不能使用auto。这段代码之所以有效,是因为在本例中它位于函数定义main中。啊,对不起,我错过了类部分的属性。用户是否定义了
s
?@JasonRice是的,用户定义了s
static constexpr auto ctx = ecst::...;
using context_t = decltype(ctx);
context_t _context;
decltype(ecst::...) _context;