高山构建环境中的 C++ 模板
c++ templates in alpine build environments
我很困惑为什么要构造这样一个非类型模板参数
template <typename TValue, typename TFile, size_t PAGESIZE>
inline typename Size<Buffer<TValue, PageFrame<TFile, Fixed<PAGESIZE> > > >::Type
capacity(Buffer<TValue, PageFrame<TFile, Fixed<PAGESIZE> > > const &)
{
return PAGESIZE;
}
会用 Alpines buildbase/gcc/stdlibc++/cmake 包绊倒 clang(4.0.0) 和 g++(6.3.0)。
这发生在高山:
file_page.h:76:22: error: expected ',' or '>' in template-parameter-list
template <size_t PAGESIZE>
^
/usr/include/limits.h:44:18: note: expanded from macro 'PAGESIZE'
#define PAGESIZE PAGE_SIZE
^
/usr/include/bits/limits.h:3:19: note: expanded from macro 'PAGE_SIZE'
#define PAGE_SIZE 4096
^
在我看来,宏扩展在这里很有用。
任何解释表示赞赏
精简后,您的代码类似于:
#include <cstddef>
#define PAGE_SIZE 4096
#define PAGESIZE PAGE_SIZE
template<std::size_t PAGESIZE>
void f() {}
您将非类型模板参数命名为与扩展为特定值的宏同名。就好像你写了:
#include <cstddef>
template<std::size_t 4096>
void f() {}
这显然是无效语法。
如果你想将非类型模板参数的默认值设置为你的宏的值,你可以这样写:
#include <cstddef>
#define PAGE_SIZE 4096
#define PAGESIZE PAGE_SIZE
template<std::size_t page_size = PAGESIZE>
void f() {}
但是,请确保在您的函数中使用 page_size
而不是 PAGESIZE
宏。
我很困惑为什么要构造这样一个非类型模板参数
template <typename TValue, typename TFile, size_t PAGESIZE>
inline typename Size<Buffer<TValue, PageFrame<TFile, Fixed<PAGESIZE> > > >::Type
capacity(Buffer<TValue, PageFrame<TFile, Fixed<PAGESIZE> > > const &)
{
return PAGESIZE;
}
会用 Alpines buildbase/gcc/stdlibc++/cmake 包绊倒 clang(4.0.0) 和 g++(6.3.0)。 这发生在高山:
file_page.h:76:22: error: expected ',' or '>' in template-parameter-list
template <size_t PAGESIZE>
^
/usr/include/limits.h:44:18: note: expanded from macro 'PAGESIZE'
#define PAGESIZE PAGE_SIZE
^
/usr/include/bits/limits.h:3:19: note: expanded from macro 'PAGE_SIZE'
#define PAGE_SIZE 4096
^
在我看来,宏扩展在这里很有用。 任何解释表示赞赏
精简后,您的代码类似于:
#include <cstddef>
#define PAGE_SIZE 4096
#define PAGESIZE PAGE_SIZE
template<std::size_t PAGESIZE>
void f() {}
您将非类型模板参数命名为与扩展为特定值的宏同名。就好像你写了:
#include <cstddef>
template<std::size_t 4096>
void f() {}
这显然是无效语法。
如果你想将非类型模板参数的默认值设置为你的宏的值,你可以这样写:
#include <cstddef>
#define PAGE_SIZE 4096
#define PAGESIZE PAGE_SIZE
template<std::size_t page_size = PAGESIZE>
void f() {}
但是,请确保在您的函数中使用 page_size
而不是 PAGESIZE
宏。