use*_*009 5 template-meta-programming c++11
我有一个固定大小的字符串类,定义如下:
template <typename const std::size_t max_size>
class fixed_string {
...
};
Run Code Online (Sandbox Code Playgroud)
此类保留一个字符缓冲区来保存字符的 max_size。
我希望能够将此类的对象传递给采用模板实例化的方法,该模板实例化具有较低的 max_size 模板参数值,而无需进行任何复制。因此,例如以下方法:
void foo(const fixed_string<50>& val) {
}
Run Code Online (Sandbox Code Playgroud)
应该可以使用 fixed_string<100> 调用,以便以下操作:
void bar() {
fixed_string<100> s = "gg";
foo(s);
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
fixed_string<50>和fixed_string<100>是不相关的类型,因此默认情况下不起作用。
一种可能性是继承fixed_string<N>自fixed_string<N-1>,但这可能会对您的实现施加不必要的限制。
您可以创建foo一个函数模板并使用static_assert或 SFINAE 来确保传递正确大小的字符串:
template <std::size_t Size>
void foo (const fixed_string<Size>& val) {
static_assert(Size >= 50, "Size must be at least 50");
}
Run Code Online (Sandbox Code Playgroud)