을 내가 템플릿 헤더 파일 (안 C++ 템플릿을 작성 권하고 싶습니다 이런 종류의 위해를하지만, 입력 - 인 - 빈 템플릿), 사람이 읽을 수있는 값을 설정 파일에 넣고 작은 프로그램을 사용하여 공백을 채 웁니다.
예를 들어 구성 파일이 JSON 일 수 있습니다. (이것은 분명히 하나의 값에 대한 잔인한, 난 그냥 기술을 보여주는거야.)
{
"addr": "::ffff:192.168.1.1"
}
당신은 기존 템플릿 언어를 사용하거나 자신을 만들 수 있습니다. C 헤더 파일과 같은 단순한 것을 위해, 당신은 아주 간단한 것을 빠져 나갈 수 있습니다.
const uint64_t addr[2] = { %%addr%% };
그리고 설정을 읽고 루비와 같은 유비쿼터스 스크립팅 언어로 템플릿을 처리하는 코드.
#!/usr/bin/env ruby
require 'json'
template, config_file = ARGV[0..1]
# Load the config file
config = JSON.load(File.new(config_file))
# Ensure missing config variables throw an error
config.default_proc = proc do |hash, key|
throw "Config key '#{key}' is missing from #{config_file}"
end
# ...do whatever processing on the config variables you want...
# Fill in the template.
IO.foreach(template) { |line|
puts line.gsub(/%%(.*?)%%/) { config[$1] }
}
이 기술은 y2038 라이브러리에서 사용됩니다. time.h의 한계를 결정하기 위해 시스템을 조사한 다음 이러한 한계를 사용자 정의 헤더 파일로 인코딩해야합니다. munge_config은 구성 값을 읽습니다 (JSON 구성이 아닌 빌드 시스템에서 결과는 동일합니다 : 해시). 그러면 템플릿이 채워집니다. 이것은 time64_limits.h.in template이고 a resulting time64_limits.h header file의 예입니다.
소스 코드를 사전 처리하는 데 사용하는 다른 프로그램을 작성합니다. – Barmar
같은 줄에 나와있는 것처럼이 IPv6 상수를 JSON 구성 파일에 넣고 템플릿 헤더 파일을 작성하는 것이 좋습니다. 프로그램을 사용하여 상수를 처리하고 템플리트에서 공백을 채 웁니다. 원하는 프로그래밍 언어와 템플릿 시스템을 사용하십시오. – Schwern
* 코딩 할 때 * 할 수 있습니다. 코드 생성기를 사용하거나 수행 한 것으로 보이는 손 - 계산의 종류에 의한 것일 수 있습니다. –