2013-10-25 18 views
6

Tôi đang làm việc trong Visual Studio 2010, sử dụng mã C++. Những gì tôi đang cố gắng làm là thay đổi giá trị của một chỉ thị tiền xử lý trong thời gian chạy, không chắc chắn nếu nó có thể nhưng tôi đã cố gắng này ..Thay đổi giá trị của macro tại thời gian chạy

somefile.h

static int mValue = 0; 
#define POO = mValue; 
... 

#if POO 0 
//define class methods 
#else 
//define class methods differently 
} 

main.cpp

main() 
{ 

//Code calls constructor and methods allowed when POO is 0 

//Code increments mValue 

//Code calls constructor and methods allowed when POO is 1 


} 

POO có thể thay đổi như thế nào để các đối tượng lớp sử dụng triển khai khác các phương pháp khác? Hoặc nếu không thể, cách tiếp cận khác là gì?

+5

Bạn không thể thay đổi chỉ thị tiền xử lý khi chạy. Việc sử dụng một lớp cơ sở với các lớp dẫn xuất khác nhau có thể hoạt động, tùy thuộc vào vấn đề của bạn (khó mà nói được từ những gì bạn đã cho chúng ta thấy). – Yuushi

Trả lời

8

Bạn dường như bị nhầm lẫn về bản chất của chỉ thị "tiền xử lý". Chúng chỉ tồn tại trước khi xử lý trình biên dịch. Trình biên dịch loại bỏ (thay thế/xử lý) các định nghĩa macro trong bước biên dịch. Chúng không tồn tại trong thời gian chạy để thay đổi. Nó thực sự là một ngôn ngữ nhỏ cho chính nó mà chỉ biên dịch thành mã c/C++, mà sau đó được xử lý bởi trình biên dịch.

Có vẻ như bạn muốn lớp của bạn là hai thứ khác nhau dựa trên một số loại đầu vào thời gian chạy. Điều này có thể chỉ ra một vấn đề thiết kế. Bạn có thể xem xét việc định nghĩa hai lớp khác nhau (có thể với một lớp cơ sở tầm thường chung).

Các vấn đề liên quan