gpt4 book ai didi

c++ - 如何为静态const模板化专用整数值分配存储

转载 作者:行者123 更新时间:2023-12-01 14:39:57 24 4
gpt4 key购买 nike

我正在尝试创建具有静态const值的仅 header 库。我需要该值具有存储空间以便可以使用它,但是我宁愿不创建.cpp文件,因为我只想制作库 header 。

如果无法实现,那么很乐意添加一个cpp文件,但仍然不知道如何定义变量以分配存储空间。

以下是该问题的虚构示例。毫不奇怪,它会因 undefined reference 上的链接错误而失败。还尝试了static constexpr size_t const &valuestatic constexpr size_t value之类的各种组合,但是多次使用 header 在链接时得到了多个定义

template.h

#pragma once

#include <cstdint>

template<typename T>
struct Data
{
static const size_t value = sizeof(T) * sizeof(char) + 27;
};

template<>
struct Data<int32_t>
{
static const size_t value = 9 * sizeof(char) + 27;
};

template<>
struct Data<int64_t>
{
static const size_t value = 18 * sizeof(char) + 27;
};

main.cpp
#include <iostream>
#include "template.h"

template<typename T>
void printValue()
{
// std::cout << "value min=" << std::min(Data<T>::value, 4ul) << std::endl;
std::cout << "value addr=" << &Data<T>::value << std::endl;
}

int main(int argc, char *argv[])
{
printValue<int32_t>();
printValue<int64_t>();
printValue<char>();
return 0;
}

使用gcc-9.2

最佳答案

您将它们全部声明为constexpr(而不是const):

template<typename T>
struct Data
{
static constexpr size_t value = sizeof(T) * sizeof(char) + 27;
};

在C++ 17中, static constexpr数据成员隐式为 inline ,因此具有存储空间。您无需执行其他任何操作。

关于c++ - 如何为静态const模板化专用整数值分配存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009167/

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