小编use*_*202的帖子

如何将 CERN Root 与 C++17 一起使用?

显然,CERN 的“Root”软件(自版本 6.12 起)与 C++17 兼容。然而,我完全无法让它与最新版本(6.20)一起工作,而且我之前发现的关于这个主题的所有问题都是几年前的。

\n

有 Root 经验的人知道是否有特定的编译器选项可以让它与 C++17 一起工作吗?

\n
\n

尝试编译一个简单的“Hello world”程序时遇到的错误示例:

\n
    \n
  • 以下是(我认为)由于“TFile.h”标头隐式加载“TString.h”:
  • \n
\n
/usr/local/bin/root_v6.20.02/include/ROOT/RStringView.hxx:32:84: error: conflicting declaration of template \xe2\x80\x98template<class _CharT, class _Traits> using basic_string_view = std::experimental::__ROOT::basic_string_view<_CharT, _Traits>\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 另一个(更神秘的,至少对我来说)错误的例子是:
  • \n
\n
/usr/include/c++/7/ext/concurrence.h:53:16: error: \xe2\x80\x98_Lock_policy\xe2\x80\x99 does not name a type                            \n   static const _Lock_policy __default_lock_policy =                                                              \n                ^~~~~~~~~~~~                                                                                      \nIn file included from /usr/include/c++/7/iostream:38:0,                                                           \n                 from test.cpp:1:                                                                                 \n/usr/include/c++/7/ext/concurrence.h: In function \xe2\x80\x98void std::__throw_concurrence_lock_error()\xe2\x80\x99:                   \n/usr/include/c++/7/ext/concurrence.h:102:5: error: \xe2\x80\x98__concurrence_lock_error\xe2\x80\x99 was not declared in this scope …
Run Code Online (Sandbox Code Playgroud)

c++ root-framework c++17

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

有没有办法将 std::variant 与任意多个定义的类型一起使用?

我只是在学习使用std::variant,我想声明一个类型列表,它由(原则上)任意多个我的用户定义类型组成。即,像

template<typename T>
struct MyType{
    T x;
};

template<typename T, int N>
MyClass{
public:
    MyType<T> y;
    int z = N;
    double w;
    MyClass(double b){
        w = b;
    }
};

template<typename T>
using my_type_list = std::variant<
    MyClass<T,1>, MyClass<T,289>, MyClass<T,13>, ...., MyClass<T,5001>
>;

template<typename T>
std::vector<my_type_list> my_big_list = {
    MyClass<T,1> { 2.0 },
    MyClass<T,1> { 3.0 },
    MyClass<T,289> { 9.4 },
    MyClass<T, 13> { 1.3 },
    MyClass<T, 5001> {2.5},
    MyClass<T, 5001> {3.2},
    ..... etc....
};

Run Code Online (Sandbox Code Playgroud)

N原则上整数可以是任何东西。

有什么办法可以做到吗?

c++ templates std-variant

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

标签 统计

c++ ×2

c++17 ×1

root-framework ×1

std-variant ×1

templates ×1