在实例化期间设置 c++ 类变量的变量类型
Set variable type for a c++ class variable during instantiation
我有一个 c++ 类
,如下所示:class some_class {
protected:
decide_later some_variable;
public:
void some_random_function();
};
void some_class::some_random_function() {
decide_later another_variable;
}
问题是我不知道some_variable的变量类型是什么,直到我创建类的实例。我想做的是如下所示:
some_class class_instance(std::string);
这将decide_later设置为使用 std::string(或 int,或双精度,或任何被告知使用的内容)。此外,如果我以后可以在作为类成员的其他函数中使用 decide_later 作为变量类型,那就太好了。例如,在函数 some_random_function() 中。
我尝试使用 boost::any 来执行此操作,但它似乎仅适用于数字类型。此外,我认为如果我能实际设置实际的变量类型会更有效。
这可能吗?
您正在寻找模板。像这样声明你的类:
template <typename T> class some_class {
protected:
T some_variable;
public:
void some_random_function() {
T another_variable;
}
};
并通过以下方式实例化它:
some_class<std::string> class_instance();
如果您在创建实例时静态知道类型,则应使用C++模板并将类型设置为模板参数。
如果您只动态知道它(即基于用户输入),则可以分支并使用不同类型的参数实例化模板,也可以选择完全动态的解决方案(如 boost::any 或等效项)。
但是,我相信,如果您不能使用模板做到这一点,那么您的程序设计就有问题。C++静态类型的思想是类型在编译时是已知的。通常在面向对象设计中,您将使用多态性而不是弱类型。
相关文章:
- 继承时如何构建派生类的变量?
- C++子类共享变量?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 打印所有继承的类成员变量和方法
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- C++ 类型类的变量声明不命名类型?
- 多个线程可以读取同一个类成员变量吗?
- (C++) 从另一个类访问变量时值无效
- 在这种情况下,当尝试从单独的类更新变量时,我是否需要使用指针?
- 在类成员函数中声明类成员变量
- 如何初始化对类内变量的静态引用,以便在嵌套类中使用
- 类静态变量初始化顺序
- 如何从 Lua 访问运行 Lua 脚本的类的变量
- 确定类静态变量的总大小?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- Qml 未收到基类成员变量的更新值
- C++不正确,不需要重新声明类成员变量 MFC 手工解决方案/项目 MS VS 2015
- 将元组分配给类成员变量
- 嵌套的类成员变量不可访问.链表设置.V、下一个和新的问题