[英]How to check conditions on a string literal at compile time passed inside a class?
我希望能夠將字符串文字傳遞給 class 實例,並在編譯時檢查字符串文字的某些條件。 但我希望 class 以某種方式完成字符串檢查。 我有一個示例代碼,大致是我想要實現的目標:
#include <type_traits>
#include <string>
#include <string_view>
class TestString
{
public:
constexpr bool TestStringCondition(const char* name) noexcept
{
return std::string_view(name).find('a') != std::string_view::npos; //random condition
}
constexpr TestString(const char* name) noexcept:
m_name(name)
{
static_assert(TestStringCondition(name), "error message");
}
const char* m_name = nullptr;
};
int main()
{
static constexpr const char* const name = {"foo"};
static const TestString testString { name };
}
我嘗試了各種選項(模板、char_traits 等),但不斷收到編譯器錯誤“static_assert 表達式不是整數常量表達式”。 似乎對作為參數傳遞的 stringliteral 不滿意,因為我可以在 class 之外進行斷言檢查。 我還不能使用任何 c++20 功能,我想要一種避免 Boost 的方法。 有人知道方法嗎?
以下工作,但我不確定它是否是你想要的:
#include <type_traits>
#include <string_view>
template<const char *const t_name>
class TestString {
public:
static constexpr bool TestStringCondition(const char *name) noexcept {
return std::string_view(name).find('a') != std::string_view::npos; // random condition
}
constexpr TestString() noexcept {
static_assert(TestStringCondition(t_name));
}
};
constexpr char okay[] = "okay"; // array, so it is a static object with linkage
int main() {
static const TestString<okay> testString{};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.