gpt4 book ai didi

class - 可以将 boost::program_options 与自己的模板类一起使用吗?

转载 作者:行者123 更新时间:2023-12-02 00:33:21 26 4
gpt4 key购买 nike

我目前开始使用 boost::program_options 来解析命令行选项和配置文件。

是否可以使用自己的模板类作为选项参数?这意味着,类似

#include <iostream>
#include "boost/program_options.hpp"

namespace po = boost::program_options;

template <typename T>
class MyClass
{
private:
T* m_data;
size_t m_size;
public:
MyClass( size_t size) : m_size(size) { m_data = new T[size]; }
~MyClass() { delete[] m_data; }
T get( size_t i ) { return m_data[i]; }
void set( size_t i, T value ) { m_data[i] = value; }
};

int main (int argc, const char * argv[])
{
po::options_description generic("General options");
generic.add_options() ("myclass", po::value< MyClass<int>(2) >(),
"Read MyClass");
return 0;
}

尝试编译它时我遇到了一个语义问题(没有匹配函数来调用“值”)。我想我需要为通用类型提供一些转换,但我没有真正的想法。

有人可以帮忙吗?谢谢

永旺512

最佳答案

我不知道 boost::program_options 是否允许你正在尝试的用例,但你得到的错误是因为你试图将一个对象作为模板类型传递给 po::value<>。如果大小在编译时已知,您可以将该大小作为模板参数传入。

template< typename T, size_t size >
class MyClass {
T m_data[size];
public:
// ...
};

然后像这样使用它:

po::value< MyClass<int, 2> >()

您还应该考虑使用 Boost.Array相反,我猜它满足了您要实现的目标。

关于class - 可以将 boost::program_options 与自己的模板类一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com