You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中创建可同时存储整数与字符串的自定义数据类型sti?

在C++中实现支持整数与字符串的自定义类型sti

当然可以实现这种同时支持整数和字符串存储的自定义类型,下面提供两种常用方案:

方案1:使用C++17标准库的std::variant(推荐)

std::variant是C++17引入的类型安全联合体,天然支持存储多种不同类型的值,是实现这类需求最简洁的方式:

#include <variant>
#include <string>

// 直接用std::variant定义sti类型
using sti = std::variant<int, std::string>;

int main() {
    sti a = 10;                // 存储整数
    sti b = "Hello";           // 存储字符串(const char*会隐式转换为std::string)
    
    // 访问存储的值
    if (std::holds_alternative<int>(a)) {
        int value = std::get<int>(a);
    }
    if (std::holds_alternative<std::string>(b)) {
        std::string str = std::get<std::string>(b);
    }
}

std::variant会自动处理类型安全检查,避免了手动管理内存和类型标识的麻烦,还支持扩展更多存储类型。

方案2:手动实现自定义类

如果需要更定制化的行为(比如重载运算符、自定义类型转换逻辑),可以手动编写类来实现:

#include <string>
#include <stdexcept>

class sti {
public:
    // 整数构造函数
    sti(int value) : type_(Type::Int), int_val_(value) {}
    // 字符串构造函数(支持const char*和std::string)
    sti(const char* str) : type_(Type::String), str_val_(str) {}
    sti(const std::string& str) : type_(Type::String), str_val_(str) {}

    // 获取整数值,类型不匹配时抛出异常
    int get_int() const {
        if (type_ != Type::Int) {
            throw std::runtime_error("当前存储的不是整数类型");
        }
        return int_val_;
    }

    // 获取字符串值,类型不匹配时抛出异常
    std::string get_string() const {
        if (type_ != Type::String) {
            throw std::runtime_error("当前存储的不是字符串类型");
        }
        return str_val_;
    }

    // 判断当前存储的类型
    bool is_int() const { return type_ == Type::Int; }
    bool is_string() const { return type_ == Type::String; }

private:
    enum class Type { Int, String };
    Type type_;
    int int_val_;
    std::string str_val_;
};

int main() {
    sti a = 10;
    sti b = "Hello";

    if (a.is_int()) {
        int val = a.get_int();
    }
    if (b.is_string()) {
        std::string str = b.get_string();
    }
}

这种方式可以完全控制类型的行为,但需要自己处理类型安全和内存管理,适合需要高度定制的场景。

内容的提问来源于stack exchange,提问作者user17198641

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:27:12