静的定数変数の値を簡単に上書きできるようにする小さなメソッドを作成しました。
変更したい変数は次のとおりです。
static const unsigned int myInt;
これが私が使用しようとしている方法です:
template<typename T>
void MyClass::SetConstantVariableValue(void* destination, T& value)
{
memcpy(destination, (const void*)&value, sizeof(value));
}
そして、メソッドを呼び出すために使用されるステートメントは次のとおりです。
int a = 5;
this->SetConstantVariableValue((void*)&myInt, a);
私の問題は、myIntが静的で定数でない場合に完全に機能することです。定数として定義するとすぐに、memcpyがアクセス違反でクラッシュします。
Unhandled exception at 0x596EEB90 (msvcr110d.dll)
0xC0000005: Access violation writing location 0x00AC16B8.
memcpyは、実行時に実行されるため、変数が定数である可能性があるという事実を無視し、宛先またはソースのデータ型が何であるかがわからないことを理解しています。それが正しければ、staticとconstの組み合わせがクラッシュの原因です。これによりmemcpyがクラッシュする理由を説明するものを見つけることができませんでした。私が間違っていることを知っている人はいますか?